Итерация по списку Необязательного объекта - PullRequest
0 голосов
/ 18 декабря 2018

В приведенном ниже коде я хотел бы знать, как можно перебрать список необязательных объектов?Согласно коду:

OptionalsUtils.toOptional(this.getUser_3())
            .flatMap(user->user.getOptUserFavoriteTvList()
                    .filter(list-> list.get(???) != Optional.empty())
            );#

Теперь я хочу сослаться на каждый индекс в списке?как мне этого добиться?

код :

OptionalsUtils.toOptional(this.getUser_3())
            .flatMap(user->user.getOptUserFavoriteTvList()
                    .filter(list-> list.get(0) != Optional.empty())
            );


 private User getUser_3() {
    List<Optional<String>> list = new ArrayList<>(5);
    list.add(Optional.of("espn"));
    list.add(Optional.of("Cnn"));
    list.add(Optional.empty());
    list.add(Optional.of("deutsch welle"));

    User user = new User();
    user.setUserName("johannas");
    user.setUserEmailAddres("joha90@gmail.com");
    user.setUserId("2005");
    user.setUserFavoritesTvList(list);
    return user;
}

public Optional<List<String>> getOptUserFavoriteTvList() {
    return OptionalsUtils.toOptional(this.getUserFavoriteTvList());
}

1 Ответ

0 голосов
/ 18 декабря 2018

после flatMap, извлеките список из необязательного, если он присутствует, через orElse, а затем примените свою логику ...

OptionalsUtils.toOptional(this.getUser_3())
              .flatMap(user-> user.getOptUserFavoriteTvList())
              .orElse(Collections.emptyList());

после вызова orElse, теперь вы работаетес List<String>, который вы можете вызвать stream() при выполнении более сложных операций или итерации по нему, используя типичный цикл for и т. д.


вы можете даже пойти с ifPresent, если этобольше подходит для поставленной задачи.

OptionalsUtils.toOptional(this.getUser_3())
              .flatMap(user-> user.getOptUserFavoriteTvList())
              .ifPresent(list -> list.forEach(e -> ....));
...