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

标签 java collections java-8 java-stream optional

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

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

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

    return recommededProducts;
}

最佳答案

您可以尝试以下方法:

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

关于java - 如果使用Java 8 Streams列表为空,则返回默认列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276601/

相关文章:

java - Servlet 上的 wait() 抛出异常

java - 套接字连接 - Java 添加字节

Java 集合到 JSON

对象上带有收集器的 Java 8 GroupingBy

java - 如何计算字符串中的表达式?

java - 如何调试 ProxyFactoryBean 拦截器未触发

java - 获取非素数及其低于给定最大值的因数

java - 使 ArrayList 只读

intellij-idea - 如何将流收集到 CopyOnWriteArrayList 中

java - 如何 junit 这个可观察的异步方法