使用一个map-filter lambda表达式从项目列表中检索对象字段

时间:2018-09-05 10:04:41

标签: java lambda java-8 optional

我们有一个SomeType项列表,我们希望从中检索特定项,对该项进行检查(过滤器),如果满足条件,则从该项中检索特定的String type字段(图),一站式表达

有关的方法接口如下。一切顺利,直到最后一步,我们要将过滤结果Optional<SomeType>映射到Optional<String>中。不幸的是,我们无法确定地图调用所需的语法

public Optional<String> transform(final List<SomeType> aList)        
    return getAnItemFromTheList(aList)
            .filter(someFilterClass::anItemFulfillsCriteria)
            .map(???use getAStringTypeFieldFromTheItem() here???);

private Optional<SomeType> getAnItemFromTheList(final List<SomeType> aList) {...
public boolean anItemFulfillsCriteria(final SomeType anItem) {... //in a separate class of filter methods
private Optional<String> getAStringTypeFieldFromTheItem(final SomeType anItem) {...

1 个答案:

答案 0 :(得分:5)

如果我正确理解getAStringTypeFieldFromTheItem将返回一个Optional<String>,那么您将在Optional<Optional<String>>之后得到map;因此只需使用flatMap而不是map来获得Optional<String>作为结果