如果使用 java 8 条流,列表为空,则返回默认列表?

Returning default list if the list is empty using java 8 Streams?

有什么方法可以将下面的操作作为一组流操作来执行,而不是显式检查 if recommendedProducts is empty then return default list else return筛选列表?

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

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

    return recommededProducts;
}

是的,使用 Optional

return Optional.of(this.newProducts.stream()
                                   .filter(isAvailable)
                                   .collect(Collectors.toList()))
                    .filter(l->!l.isEmpty())
                    .orElse(DEFAULT_PRODUCTS);

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

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

return recommendedProducts.isEmpty() ? DEFAULT_PRODUCTS : recommendedProducts;

你可以试试这个:

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