Das Problem wird folgende Fehler bekommen ist, dass Sie mit java.util.concurrent.ConcurrentHashMap
, die java.util.function.Function
als Par akzeptiert Ameter für computeIfAbsent()
anstelle von scala.Function1
, die Sie daran übergeben.
Da scala keine Lambda-Konvertierung für funktionale Schnittstellen wie Java funktioniert (zumindest nicht ohne die -Xexperimental
flag) unterstützen, können Sie dieses Problem lösen, indem eine java.util.function.Function
explizit Umsetzung:
val data = new ConcurrentHashMap[String, LongAdder]
val adderSupplier = new java.util.function.Function[String, LongAdder]() {
override def apply(t: String): LongAdder = new LongAdder()
}
data.computeIfAbsent("bob", adderSupplier).increment()
Alternativ, wenn Sie diese brauchen
object FunctionConverter {
implicit def scalaFunctionToJava[From, To](function: (From) => To): java.util.function.Function[From, To] = {
new java.util.function.Function[From, To] {
override def apply(input: From): To = function(input)
}
}
}
import FunctionConverter._
val data = new ConcurrentHashMap[String, LongAdder]()
data.computeIfAbsent("bob", (k: String) => new LongAdder()) // <- implicit conversion applied here