如果使用 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));
有什么方法可以将下面的操作作为一组流操作来执行,而不是显式检查 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));