2016-10-12 3 views
2

Mein Java-Code sieht aus wie (java8, Lambda unterstützt):Java Anruf Scala HashMap des getOrElse

import scala.collection.mutable.HashMap; 
... 
public void test() { 
    HashMap<Integer, String> map = new HashMap<>(); 
    map.put(1, "Hello"); 

    // ERROR: parameter need Function0<B1>. given int,()->"World". 
    map.getOrElse(1,() -> "World"); 
} 

, wenn ich das Projekt erstellen, es sagt mir parameter need Function0<B1>. given int,()->"World". aber meine IDE (Idee) Erinnere mich nicht, dass dies ein Fehler, selbst wenn ich dazu aufgefordert werde, den Code "new Function0() {...}" auf "() -> World" zu reduzieren. Also Wie kann ich Scala (HashMap) 's getOrElse Methode in Java-Code (Java8) aufrufen?

Antwort

3

Ich denke, dass das Problem ist, dass eine Java8-Funktionsschnittstelle nicht direkt in Scala-Funktionen konvertierbar ist.

Dies wird in Scala 2.12 angesprochen (wie angegeben here). Die Lösung scheint ein Wrapper zu sein, der die Konvertierung für Sie vornimmt.

Weitere Details here das Beispiel in der Readme gegeben ist, was Sie suchen:

import scala.concurrent.*; 
import static scala.compat.java8.JFunction.*; 

class Test { 
    private static Future<Integer> futureExample(Future<String> future, ExecutionContext ec) { 
     return future.map(func(s -> s.toUpperCase()), ec).map(func(s -> s.length()), ec); 
    } 
}