Java"lambda转换的目标类型必须是一个接口"

Moc*_*uck 22 java lambda intellij-idea

我正在尝试在java中使用lambdas和stream,但我对它很新.当我尝试创建一个lambda表达式时,我在IntelliJ中遇到了这个错误"lambda转换的目标类型必须是一个接口"

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

难道我做错了什么?

Lou*_*man 28

我怀疑这只是Java的类型推断还不够智能.尝试

 .map(p -> (Callable<SomeClass>) () -> p.funct())
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 10

Stream#map()是一种类型化方法,因此您可以显式指定类型:

 .<Callable<SomeClass>>map(p -> () -> p.funct())
Run Code Online (Sandbox Code Playgroud)

或者更整洁,使用方法参考:

 .<Callable<SomeClass>>map(p -> p::funct)
Run Code Online (Sandbox Code Playgroud)