java 8 Collector 不是一个function界面,谁可以告诉为什么?

以下代码:

public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors::toList) } } 

intellij告诉我:

Collector不是function接口

但是当我修改代码如下,一切都很好,我不知道为什么?

 public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors.toList) } } 

第一种语法是非法的原因是方法签名 – Stream.collect(Collector)隐含的目标类型 – 是CollectorCollector有多个抽象方法,因此它不是一个function接口,也不能有@FunctionalInterface注释。

Class::functionobject::method这样的方法引用只能分配给function接口类型。 由于Collector不是函数接口,因此不能使用方法引用来提供collect(Collector)参数。

而是将Collectors.toList()作为函数调用。 显式的类型参数是不必要的,并且您的“工作”示例在最后没有括号时将不起作用。 这将创建一个可以传递给collect()Collector实例。

Collector接口有多个方法( combiner()finisher()supplier()accumulator() )需要一个实现,因此它不能是一个function接口,它只能有一个没有默认实现的方法。

我看不出你的问题与附加的代码有什么关系。