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

2022-09-01 03:47:48

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

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

我做错了什么吗?


答案 1

我怀疑这只是Java的类型推断不够聪明。尝试

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

答案 2

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

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

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

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

推荐