Получить поле объекта из списка элементов с помощью одного лямбда-выражения фильтра карты - PullRequest
0 голосов
/ 05 сентября 2018

У нас есть список элементов SomeType, из которых мы хотели бы получить конкретный элемент, выполнить проверку этого элемента (фильтра) и, если критерии выполнены, затем извлечь конкретное поле типа String из элемента (map ), все в одном выражении

Соответствующие интерфейсы метода следующие. Все идет хорошо до последнего шага, где мы хотели бы отобразить результат фильтра 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 голосов
/ 05 сентября 2018

Хорошо, если я правильно понял, что getAStringTypeFieldFromTheItem вернет Optional<String>, таким образом, вы получите Optional<Optional<String>> после map; таким образом, просто используйте flatMap вместо map, чтобы получить Optional<String> в результате

...