Java 8 Stream返回属性或null

时间:2017-11-21 14:30:59

标签: java

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

类似的东西:

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

1 个答案:

答案 0 :(得分:2)

首先,让我们编写一些我们将要分析的代码行。

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

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());
  • 最后,我们调用orElse Optional的{​​{1}}等同于获取Optional的内容(如果不为空)或取参数中给出的值,在我们的案例中null。< / LI>

最后,请注意map功能的签名如下:

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

后者因此在Optional上应用该功能并返回Optional