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

时间:2015-12-23 00:32:25

标签: java intellij-idea lambda

我正在尝试在java中使用lambdas和stream,但我对它很新。 我在IntelliJ中遇到此错误“当我尝试制作lambda表达式时,目标类型的lambda转换必须是一个接口”

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

我做错了吗?

2 个答案:

答案 0 :(得分:26)

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

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

答案 1 :(得分:7)

Stream#map()是一种typed方法,因此您可以明确指定类型:

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

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

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