If you work on a Java/Scala mixed project you can find yourself converting java collections and/or primitive wrappers to/from corresponding scala classes or vice versa. JavaConverters is your friend here, but it's not always good enough.
If you are tired of doing something like this
import scala.jdk.CollectionConverters._
def iTakeInt(i: Int) = { ... }
val something = someJavaListOfJavaIntegers.asScala.map(iTakeInt(_))
or this
import scala.jdk.CollectionConverters._
val something: mutable.Map[java.lang.Long, Buffer] =
someJavaMapOfJavaLongsToJavaLists.asScala.mapValues(_.asScala)
look no more!
Now you can do
import com.daodecode.scalaj.collection._
def iTakeInt(i: Int) = { ... }
val something = someJavaListOfJavaIntegers.deepAsScala.map(iTakeInt)
and
import com.daodecode.scalaj.collection._
val something: mutable.Map[Long, Buffer] =
someJavaMapOfJavaLongsToJavaLists.deepAsScala
ScalaJ Converters will go all the way down converting every nested collection or primitive type.
Of course you should be ready to pay some cost for all these conversions.
Import import com.daodecode.scalaj.collection._
aslo brings standard JavaConverters._
in scope,
so you can use plain asJava/asScala
if you don't have nested collections or collections of primitives.
Having scalaj-googloptional
in classpath you can add guava Optionals to your
funky data structures and convert between them and scala versions all the way down and back.
val foo: java.util.Set[Optional[java.lang.Double] = ...
import com.daodecode.scalaj.googleoptional._
val scalaFoo: mutable.Set[Option[Double]] = foo.deepAsScala
If you want you scala collections well-done immutable, you can do it as well
val boo: java.util.Set[Optional[java.util.List[java.lang.Double]] = ...
import com.daodecode.scalaj.googleoptional._
import com.daodecode.scalaj.collection.immutable._
val immutableScalaBoo: Set[Option[immutable.Seq[Double]]] = boo.deepAsScalaImmutable
2.10 | 2.11 | 2.12 | 2.13 | 3 |
---|---|---|---|---|
libraryDependencies += "com.daodecode" %% "scalaj-collection" % "0.3.2"
set <scala.binary.version>
property to scala version you need, like
<properties>
<scala.binary.version>2.13</scala.binary.version>
</properties>
and then in dependencies
add
<dependency>
<groupId>com.daodecode</groupId>
<artifactId>scalaj-collection_${scala.binary.version}</artifactId>
<version>0.3.2</version>
</dependency>
2.10 | 2.11 | 2.12 | 2.13 | 3 |
---|---|---|---|---|
libraryDependencies += "com.daodecode" %% "scalaj-googleoptional" % "0.3.2"
<properties>
<scala.binary.version>2.13</scala.binary.version>
</properties>
and then in dependencies
add
<dependency>
<groupId>com.daodecode</groupId>
<artifactId>scalaj-googleoptional_${scala.binary.version}</artifactId>
<version>0.3.2</version>
</dependency>
First add sonatype snapshots repository to your settings
resolvers += Resolver.sonatypeRepo("snapshots")
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
then add snapshot as a dependency
libraryDependencies += "com.daodecode" %% "scalaj-collection" % "0.3.3-SNAPSHOT"
<properties>
<scala.binary.version>2.13</scala.binary.version>
</properties>
and then in dependencies
add
<dependency>
<groupId>com.daodecode</groupId>
<artifactId>scalaj-collection_${scala.binary.version}</artifactId>
<version>0.3.3-SNAPSHOT</version>
</dependency>
libraryDependencies += "com.daodecode" %% "scalaj-googleoptional" % "0.3.3-SNAPSHOT"
<properties>
<scala.binary.version>2.13</scala.binary.version>
</properties>
and then in dependencies
add
<dependency>
<groupId>com.daodecode</groupId>
<artifactId>scalaj-googleoptional_${scala.binary.version}</artifactId>
<version>0.3.3-SNAPSHOT</version>
</dependency>