这在最外层没有隐式,但我喜欢这种通用方法,并且已经为几种类型的集合(List、Map)实现了它。
import java.util.{List => JList}
import scala.collection.JavaConverters._
def scalaList2JavaList[A, B](scalaList: List[A])
(implicit a2bConversion: A => B): JList[B] =
(scalaList map a2bConversion).asJava
由于从 Int 到 Integer 的隐式转换是标准库的一部分,因此在这种情况下的用法如下所示:
scalaList2JavaList[Int, Integer](someScalaList)
在另一个方向!
(因为无论如何我都有这些可用,因为它们是我最初的实现......)
import java.util.{List => JList}
import scala.collection.JavaConversions._
def javaList2ScalaList[A, B](javaList: JList[A])
(implicit a2bConversion: A => B): List[B] =
javaList.toList map a2bConversion
用法:
javaList2ScalaList[Integer, Int](someJavaList)
只要包含类型的隐式转换在范围内,就可以将其重新用于所有列表。
(如果你好奇,这是我的地图实现......)
def javaMap2ScalaMap[A, B, C, D](javaMap: util.Map[A, B])(implicit a2cConversion: A => C, b2dConversion: B => D): Map[C, D] =
javaMap.toMap map { case (a, b) => (a2cConversion(a), b2dConversion(b)) }