Java 8 个带方法调用的过滤器
Java 8 filter with method call
我正在学习 Java 8 lambda 和流并尝试一些示例。但面临着问题。这是我的代码
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
}
我在 .map addr(第二个参数)字段中遇到编译错误。
这有什么问题吗?您能否提供 links 来学习 java 8 个流。
仅供参考 link Java 8 lambda
第一个问题是 map
方法调用没有声明 addr
变量。
第二个问题是map
.
中没有return类型的方法的使用
您不能按照尝试的方式使用方法引用 (map( this::preparePersonInfo,p,addr)
),因为方法引用的参数是隐式传递的。如果 preparePersonInfo
只需要一个 Address
参数,你可以这样写:
notes.stream().filter( addr -> addr !=null).forEach(this::preparePersonInfo);
因为在这种情况下,Address
参数将从 Stream 传递。
您可能想要向 Stream 管道添加一些终端操作,否则它不会被处理。由于您的 preparePersonInfo
没有 return 任何东西,它不能在 map
中使用(因为 map
将 Stream 元素映射到其他东西,所以它必须 return 东西)。如果您只想对通过过滤器的 Stream 的每个元素执行操作,那么 forEach
可能会满足您的需求。
因此,以下内容应该适用于您当前的 preparePersonInfo
方法:
notes.stream().filter( addr -> addr !=null).forEach (addr -> preparePersonInfo(p,addr));
我正在学习 Java 8 lambda 和流并尝试一些示例。但面临着问题。这是我的代码
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
}
我在 .map addr(第二个参数)字段中遇到编译错误。 这有什么问题吗?您能否提供 links 来学习 java 8 个流。 仅供参考 link Java 8 lambda
第一个问题是 map
方法调用没有声明 addr
变量。
第二个问题是map
.
您不能按照尝试的方式使用方法引用 (map( this::preparePersonInfo,p,addr)
),因为方法引用的参数是隐式传递的。如果 preparePersonInfo
只需要一个 Address
参数,你可以这样写:
notes.stream().filter( addr -> addr !=null).forEach(this::preparePersonInfo);
因为在这种情况下,Address
参数将从 Stream 传递。
您可能想要向 Stream 管道添加一些终端操作,否则它不会被处理。由于您的 preparePersonInfo
没有 return 任何东西,它不能在 map
中使用(因为 map
将 Stream 元素映射到其他东西,所以它必须 return 东西)。如果您只想对通过过滤器的 Stream 的每个元素执行操作,那么 forEach
可能会满足您的需求。
因此,以下内容应该适用于您当前的 preparePersonInfo
方法:
notes.stream().filter( addr -> addr !=null).forEach (addr -> preparePersonInfo(p,addr));