2015-12-23 51 views
11

我想在java中使用lambdas和流,但我對它很陌生。 我的IntelliJ得到這個錯誤「拉姆達轉換的目標類型必須是接口」當我試圖做一個lambda表達式Java「目標類型的lambda轉換必須是一個接口」

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

難道我做錯了什麼?

回答

14

我懷疑這只是Java的類型推斷不夠聰明。嘗試

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

Stream#map()typed方法,這樣你就可以明確地指定類型:

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

或簡潔,使用方法參考:

.<Callable<SomeClass>>map(p -> p::funct) 
相關問題