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

ham*_*est 3 java lambda optional java-8

我们必须从中我们想获取一个特定的项目,在该项目上(过滤器)进行检查SOMETYPE项目的列表,并且如果条件满足,那么检索项目(图)一个特定的字符串类型字段,所有在一个表达式

有关的方法接口如下.一切都很顺利,直到最后一步,我们希望将过滤结果映射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) {...
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 5

好吧,如果我理解正确,getAStringTypeFieldFromTheItem将返回一个Optional<String>,因此你将最终Optional<Optional<String>>得到map; 因此,只需使用flatMap而不是map得到Optional<String>结果

  • 它看起来像这样:`return getAnItemFromTheList(aList).filter(SomeFilterClass :: anItemFulfillsCriteria).flatMap(item - > getAStringTypeFieldFromTheItem(item));` (2认同)
  • @LuCio如果OP在最后的`flatMap`中使用方法引用会更好 (2认同)