遍历Optional对象的列表

时间:2018-12-18 12:12:30

标签: android java-8 optional

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

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 :(得分: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 -> ....));