如何解决流利API的Lambda?
试图用Stream API(以下代码)中的匿名类替换lambda,并且工作正常。我想了解如何从中生成test(T 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
是如何生成的。是由于Fluent API
中的Stream
还是由于功能接口(lambda)?
编辑:我对lambda
的版本很清楚,不了解带有anonymous class
的版本是如何工作的?换句话说,它是否可以在Java 1.7
中工作(如果我们编写的内容与Stream API
类似,我们就不会有lambda了。)
编辑:对于像我一样困惑的任何人,请看看https://github.com/fmcarvalho/quiny,这是一些聪明人简化的Stream API实现
解决方法
当您编写t -> t > 4
时,Java会自动推断该lambda的类型-它必须是Predicate<Integer>
,因为它已通过filter
传递给Stream<Integer>
-然后自动确定它必须为(Integer t) -> t > 4
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。