mal*_*jun 6 java java-8 java-stream
我正在学习Java 8 lambda和stream并尝试一些例子.但面临问题.这是我的代码
fillUpdate(Person p){
List<Address> notes = getAddress();
notes.stream().filter( addr -> addr !=null).map( this::preparePersonInfo,p,addr);
}
private void preparePersonInfo(Person p, Address addr){
// do some stuff
}
Run Code Online (Sandbox Code Playgroud)
我在.map addr(第二个参数)字段中遇到编译错误.它有什么问题,请你提供学习java 8流的链接.仅供参考此链接Java 8 lambda
第一个问题是map方法调用不声明addr变量.
第二个问题是使用没有返回类型的方法map.
您不能以try(map( this::preparePersonInfo,p,addr))的方式使用方法引用,因为方法引用的参数是隐式传递的.如果preparePersonInfo只需要一个Address参数,你可以写:
notes.stream().filter( addr -> addr !=null).forEach(this::preparePersonInfo);
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,Address参数将从Stream传递.
您可能希望向Stream管道添加一些终端操作,否则它将不会被处理.由于您preparePersonInfo没有返回任何内容,因此无法使用map(map将Stream元素映射到其他内容,因此必须返回一些内容).forEach如果您想要的只是对通过过滤器的Stream的每个元素执行操作,可能会满足您的需求.
因此,以下内容应与您当前的preparePersonInfo方法一起使用:
notes.stream().filter( addr -> addr !=null).forEach (addr -> preparePersonInfo(p,addr));
Run Code Online (Sandbox Code Playgroud)