首页 > 解决方案 > 遍历可选对象列表

问题描述

在下面发布的代码中,我想知道如何遍历可选对象列表?根据代码:

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());
}

标签: androidjava-8optional

解决方案


之后flatMap,从可选的(如果存在)中提取列表orElse,然后应用您的逻辑...

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

在调用 之后orElse,您现在正在使用 a List<String>,您可以调用stream()它来执行更复杂的操作或使用典型的 for 循环等迭代它......


ifPresent如果它更适合手头的任务,你甚至可以选择。

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

推荐阅读