Java 8 Stream 返回属性或 null

标签 java

有没有办法使用流返回 bean 的属性,或者如果 bean 不存在则返回 null?

类似于:

String property = beans.stream()
    .filter(bean -> bean.getId() == id).findFirst().orElse(null).beanProperty();

最佳答案

首先,让我们编写一些代码行,然后我们将对其进行分析。

实现此目标的最佳方法是执行以下操作:

String property = beans.stream()
    .filter(bean -> bean.getId() == id)
    .findFirst()
    .map(Property::beanProperty)
    .orElse(null);

这里有一些解释:

  • 首先,我们使用 Stream 过滤属性列表,以便使用 filter 方法仅保留具有给定 ID 的属性。这会将 Stream 转换为 Stream
  • 然后,我们使用 map 获取 bean 属性。请注意,当且仅当后者不为空时,此方法才会将所需的映射函数应用于 Optional 的内容。另请注意,我假设我们的属性有一个名为 Property 的 POJO,并且我使用方法引用来获取该属性。这相当于编写 .map(prop -> prop.beanProperty());
  • 最后,我们调用 OptionalorElse,这等效于获取 Optional 的内容(如果不为空)或获取参数中给定的值,在我们的例子中

最后,请注意 map 函数的签名如下:

public<U> Optional<U> map(Function<? super T, ? extends U> mapper)

后者因此在 Optional 上应用函数并返回 Optional

关于Java 8 Stream 返回属性或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47415592/

相关文章:

java - 在 JTable 中设置列​​的数据类型

Java 二进制补码转整数

java - 出错后重启 BehaviorSubject

java - 使用泛型检查 @Entity 的 @Unique

java - 在 JTextField 的 DocumentFilter 中使用正则表达式时出现问题

java - j2objc - 解析对象类型

java - 生成签名和加密的 JWT

java - 如何在切换Fragment时停止AsyncTask?

Java:选择排序我的实现与另一个

java - DataLoader批量加载bug(MyBatis、JavaEE)