【问题标题】:Iterate through list of Optional object遍历可选对象列表
【发布时间】:2018-12-18 12:12:30
【问题描述】:

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

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

【问题讨论】:

  • 使用您的 getOptUserFavoriteTvList() 方法使用您的列表并使用 for 循环进行迭代
  • OptionalsUtils.toOptional 是做什么的?看起来 Optional.ofNullable 是您应该使用的,而不是自定义实用程序方法。

标签: android java-8 optional


【解决方案1】:

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

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

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


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2011-08-19
    • 2018-05-08
    • 2015-03-17
    • 2011-06-11
    • 1970-01-01
    • 2016-12-29
    相关资源
    最近更新 更多