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

n53p2ov0  于 2023-05-06  发布在  Java
关注(0)|答案(3)|浏览(119)

我正在尝试在java中使用lambda表达式和流,但我对它很陌生。当我尝试创建一个lambda表达式时,我在IntelliJ中得到了这个错误“lambda转换的目标类型必须是一个接口”

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

我做错什么了吗?

wribegjk

wribegjk1#

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

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

beq87vna2#

Stream#map()是一个typed方法,所以你可以显式地指定类型:

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

或更整洁的方法,使用方法引用:

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

wfauudbj3#

如果你正在使用其他的流畅API,请确保你调用了正确的方法:
错误(捂脸):

Optional.ofNullable(something).orElse(() -> createObject());

右:

Optional.ofNullable(something).orElseGet(() -> createObject());

相关问题