如果使用Java 8 Streams列表为空,则返回默认列表?

use*_*691 9 java collections optional java-8 java-stream

有什么办法可以将以下操作作为一组流操作来执行,而不是显式地检查committedProducts 是否为空,然后返回默认列表,否则返回过滤后的列表

public List<Product> getRecommendedProducts() {
    List<Product> recommendedProducts 
        = this.newProducts
              .stream()
              .filter(isAvailable)
              .collect(Collectors.toList());

    if (recommendedProducts.isEmpty()) {
        return DEFAULT_PRODUCTS;
    }

    return recommededProducts;
}
Run Code Online (Sandbox Code Playgroud)

ETO*_*ETO 5

尽管您可以使用实现目标Optional,但我仍然会选择普通的三元运算符。

在这种特殊情况下,它更有意义并提高了可读性:

return recommendedProducts.isEmpty() ? DEFAULT_PRODUCTS : recommendedProducts;
Run Code Online (Sandbox Code Playgroud)


Die*_*rin 5

您可以尝试以下方法:

List<Product> recommendedProducts 
        = this.newProducts
              .stream()
              .filter(isAvailable)
              .collect(Collectors.collectingAndThen(Collectors.toList(), list -> list.isEmpty() ? DEFAULT_PRODUCTS : list));
Run Code Online (Sandbox Code Playgroud)