有没有办法使用流来返回bean的属性,如果bean不存在则使用null?
类似的东西:
String property = beans.stream()
.filter(bean -> bean.getId() == id).findFirst().orElse(null).beanProperty();
答案 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
。