2015-12-23 8 views
11

Sto provando ad usare lambda e flussi in java ma sono abbastanza nuovo ad esso. ho ottenuto questo errore in IntelliJ "tipo di destinazione della conversione lambda deve essere un'interfaccia" quando cerco di fare un'espressione lambdaJava "il tipo di destinazione della conversione lambda deve essere un'interfaccia"

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

sto facendo qualcosa di sbagliato?

risposta

14

Sospetto che sia solo l'inferenza di tipo Java che non sia abbastanza intelligente. Prova

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

Stream#map() è un metodo typed, in modo da poter specificare esplicitamente il tipo:

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

o più ordinato, utilizzare un riferimento metodo:

.<Callable<SomeClass>>map(p -> p::funct) 
Problemi correlati