Преобразование вложенного необязательного списка в необязательный список в Java? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть optionalIdList (Optional<Set<String>> optionalIdList), который я хочу перебрать, а затем преобразовать обратно в Optional<Set<String>>. Мой код до сих пор выглядит следующим образом:

optionalIdList
              .map(
                  idList ->
                      idList.stream()
                          .map(
                              id ->
                                  filterIds(
                                      partnerIds
                                  )))
              .flatMap(streamOfLists -> streamOfLists.map(item -> item.orElseGet(ImmutableSet::of)));

Список filterIds возвращает Optional<Set<String>>

Однако с моим текущим решением я получаю следующую ошибку:

Требуемый тип: Optional<Set<String>>

Предоставляется: Optional<Object>

Есть ли удобный способ делать то, что я хочу?

1 Ответ

0 голосов
/ 14 июля 2020

РЕДАКТИРОВАТЬ: по какой-то причине я предположил, что filterIds возвращает один String, а не Optional<Set<String>>, как вы написали.

Вот обновленный ответ:

Optional<Set<String>> output =
    optionalIdList.map(idList -> idList.stream()
                                       .map(id -> filterIds(partnerIds))
                                       .filter (Optional::isPresent)
                                       .map (Optional::get)
                                       .flatMap (Set::stream)
                                       .collect(Collectors.toSet()));
...