Java fluentapi的Lambda?
尝试用流API中的匿名类替换lambdas(在代码下面),效果很好。我想了解test(T)方法所需的参数是如何从中生成的 兰姆达Java fluentapi的Lambda?,java,lambda,java-8,java-stream,fluent,Java,Lambda,Java 8,Java Stream,Fluent,尝试用流API中的匿名类替换lambdas(在代码下面),效果很好。我想了解test(T)方法所需的参数是如何从中生成的 兰姆达 list.stream() .map(String::length) .filter(t->t>4).count(); 匿名类 list.stream()//line1 .map(String::
list.stream()
.map(String::length)
.filter(t->t>4).count();
匿名类
list.stream()//line1
.map(String::length)
.filter(new Predicate<Integer>() {
@Override
public boolean test(Integer t) {//line 5
return t>4;
}
}).count();
list.stream()//第1行
.map(字符串::长度)
.filter(新谓词(){
@凌驾
公共布尔测试(整数t){//第5行
返回t>4;
}
}).count();
使用lambdas时,我们使用lambda表示法传递参数,但我不明白第5行的整数t
是如何生成的。是由于流中的Fluent API
还是由于功能接口(lambda)
编辑:我对lambda
版本很清楚,不明白匿名类的版本是如何工作的?换句话说,它能在Java1.7
中工作吗(如果我们编写了类似于StreamAPI
的东西,我们就不会有lambdas了)
编辑:对于像我一样困惑的人,请看一看,一些聪明人简化了流API的实现当你编写t->t>4
时,Java自动推断出这个lambda的类型——它必须是谓词
,假设它被传递到流上的过滤器
,然后自动计算出它必须是(整数t)->t>4
,是的,它在Java 7中可以使用匿名类。(一些第三方图书馆正是这样做的,例如Guava's Fluentitable。)好的,谢谢。那么,是Fluent API负责这个功能吗?我的意思是,真正负责的不是“Fluent API”。这只是…这些语言特性是如何工作的。好的,java中的哪个特性,方法链接?但是我看不到这个关键字在这里被使用,通常在方法链接中使用。方法链接实际上不是一种语言特性,它只是一种使用语言的方式。它实际上与谓词的使用根本没有关系。使用此
也不是实现方法链接的必要条件。