Перебирать список необязательных объектов

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

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("[email protected]");
    user.setUserId("2005");
    user.setUserFavoritesTvList(list);
    return user;
}

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

используйте свой список, используя метод getOptUserFavoriteTvList (), и повторяйте, используя цикл for

Vivek Mishra 18.12.2018 13:20

Что делает OptionalsUtils.toOptional? Похоже, вам следует использовать Optional.ofNullable вместо пользовательского служебного метода.

ETO 18.12.2018 15:04
0
2
2 947
1

Ответы 1

после 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 -> ....));

Другие вопросы по теме