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