2015-12-23 4 views
11

Ich versuche, Lambdas und Streams in Java zu verwenden, aber ich bin ziemlich neu. ich diesen Fehler in IntelliJ bekam „Zielart von Lambda-Umwandlung muss eine Schnittstelle sein,“ wenn ich versuche, ein Lambda-Ausdruck falschJava "Zieltyp der Lambda-Konvertierung muss eine Schnittstelle sein"

List<Callable<SomeClass>> callList = prgll.stream() 
              .map(p->(()->{return p.funct();})) <--- Here I get error 
              .collect(Collectors.toList()); 

Bin ich etwas zu tun zu machen?

Antwort

14

Ich vermute, es ist nur die Typ-Inferenz von Java, die nicht ziemlich intelligent genug ist. Versuchen

.map(p -> (Callable<SomeClass>)() -> p.funct()) 
2

Stream#map() ein Verfahren typed ist, so können Sie den Typ explizit angeben:

.<Callable<SomeClass>>map(p ->() -> p.funct()) 

oder sauberere, verwenden Sie eine Methode Referenz:

.<Callable<SomeClass>>map(p -> p::funct) 
Verwandte Themen