Lambda of Fluent API?



尝试在Stream API中用匿名类替换lambdas(下面的代码(,效果很好。我想了解test(T(方法所需的参数是如何生成的。

Lambda

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();

在使用lambda时,我们使用lambda表示法传递参数,但我不明白第5行的Integer t是如何生成的。是由于Stream中的Fluent API还是由于功能接口(lambda(?

编辑:我很清楚lambda版本,不明白带anonymous class的版本是如何工作的?换句话说,它在Java 1.7中工作吗(如果我们写了类似于Stream API的东西,我们就不会有lambdas了(。

编辑:对于任何像我一样困惑的人,请查看https://github.com/fmcarvalho/quiny,一些聪明人简化了Stream API的实现

当您编写t -> t > 4时,Java会自动推断出这个lambda的类型——它必须是Predicate<Integer>,假设它是在Stream<Integer>上传递给filter的——然后自动计算出它一定是(Integer t) -> t > 4

最新更新