簡體   English   中英

在Java中從Optional-> List-> List轉換的鏈方法

[英]Chain methods to convert from Optional->List->List in Java

我有一個包含列表的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可能是解決方案,但我無法弄清楚如何在這里使用它。

沒有。 如果是OptionalflatMap將可能的Optional<Optional<T>>壓平為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());
}

Java 9方法將成為下列方法:

public List<Bar> get(Optional<Foo> foo) {
         return foo.map(Foo::getBazList)
                   .stream()
                   .flatMap(Collection::stream)
                   .map(Baz::getBar)
                   .collect(Collectors.toList());
}

也就是說,您應該避免使用Optional s作為參數, 請參閱此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM