首页 > 解决方案 > 从 Java 中的 Optional->List->List 转换的链式方法

问题描述

我有一个Optional包含列表的对象。我想将此列表中的每个对象映射到另一个列表,并返回结果列表。

那是:

public List<Bar> get(int id) {
    Optional<Foo> optfoo = dao.getById(id);
    return optfoo.map(foo -> foo.getBazList.stream().map(baz -> baz.getBar()))
}

有没有一种干净的方法可以做到这一点而没有流中的流?

我认为这flatMap可能是解决方案,但我不知道如何在这里使用它。

标签: javajava-8java-streamoptional

解决方案


没有。flatMapin case of Optionalis to flatten a possible Optional<Optional<T>>to Optional<T>. 所以这是正确的。

public List<Bar> get(Optional<Foo> foo) {
     return foo.map(x -> x.getBazList()
                          .stream()
                          .map(Baz::getBar)
                          .collect(Collectors.toList()))
               .orElse(Collections.emptyList());
}

推荐阅读