Java 8
List expiredGuarantees = getProducts().stream()
.map(Product::getGuarantee)
.filter(Optional::isPresent)
.map(Optional::get)
.filter(not(Guarantee::hasExpired))
.collect(toList());
Java 9
Java9有Optional :: stream.因此,您可以使用单个flatMap替换过滤和映射:
List expiredGuarantees = getProducts().stream()
.map(Product::getGuarantee)
.flatMap(Optional::stream)
.filter(not(Guarantee::hasExpired))
.collect(toList());
注意
Java 8没有Predicates.not方法.它仅包含在第11版以来.
通过在项目中添加以下方法,您将能够将其与上述解决方案一起使用.
public static Predicate not(Predicate predicate) {
return predicate.negate();
}
更新
虽然这不是CodeReview社区,但以下是您的代码的一些注意事项:
>通过将两个管道组合成一个单独的代码将更清晰(在这种特殊情况下).
>在可能的情况下,首选基于lambda的方法引用
>为变量指定适当的名称,这样您就可以更轻松地维护代码