Rol*_*olt 8 java lambda java-8 java-stream collectors
以下代码:
public class Test {
public static void main(String[] args) {
Stream.of(1,2,3).map(String::valueOf).collect(Collectors::toList)
}
}
Run Code Online (Sandbox Code Playgroud)
intellij告诉我:
Collector<String, A, R> 不是功能界面
但是当我按如下方式修改代码时,一切都还可以,我不知道为什么?
public class Test {
public static void main(String[] args) {
Stream.of(1,2,3).map(String::valueOf).collect(Collectors.<String>toList());
}
}
Run Code Online (Sandbox Code Playgroud)
第一种语法非法的原因是方法签名所暗示的目标类型Stream.collect(Collector)- 是a Collector.Collector有多个抽象方法,因此它不是一个功能界面,也不能有@FunctionalInterface注释.
方法引用类似Class::function或object::method只能分配给功能接口类型.由于Collector不是功能接口,因此不能使用方法引用来提供参数collect(Collector).
相反,Collectors.toList()作为一个函数调用.显式<String>类型参数是不必要的,并且您的"工作"示例在最后没有括号时将不起作用.这将创建一个Collector可以传递给的实例collect().
该Collector接口有多个方法(combiner()、finisher()、supplier()、accumulator())需要一个实现,因此它不能是函数式接口,函数式接口只能有一个方法,没有默认实现。
我不明白你的问题与所附代码有何关系。
| 归档时间: |
|
| 查看次数: |
4614 次 |
| 最近记录: |