这个问题在这里已经有答案了:
如何在Java8中定义一个以lambda作为参数的方法(14个答案)
如何用一个参数传递Java8 lambda(3个答案)
如何在java中传递函数作为参数[重复](8个答案)
java 8 pass方法作为参数(2个答案)
昨天关门了。
我有以下方法:
public String getAllDangerousProductsName(Offer offer){
return offer.getOfferRows().stream()
.filter(row -> row.isDangerousGood())
.map(row -> row.getItemInformation().getOfferTexts().getName())
.collect(Collectors.joining(","));
}
我想对row.isbulkygood()重用此方法。我现在做的是
public String getAllBulkyProductsName(Offer offer){
return offer.getOfferRows().stream()
.filter(row -> row.isBulkyGood())
.map(row -> row.getItemInformation().getOfferTexts().getName())
.collect(Collectors.joining(","));
}
... 基本上就是代码重复。有没有一种方法,我可以通过作为方法参数的函数来优化这两个过滤条件有一个方法?
3条答案
按热度按时间wkftcu5l1#
你可以通过考试
Predicate
在方法的筛选权限中使用,这是方法中唯一不同的地方。假设
offer.getOfferRows()
退货List<OfferRow>
,然后:使用变得相当简单:
yqkkidmi2#
是的,你可以加一个
Predicate<OfferRow>
参数,然后使用方法引用OfferRow::isDangerousGood
或者OfferRow::isBulkyGood
:如果需要否定 predicate 的条件,
Predicate.not
可以从Java11开始使用。对于Java8-10,可以使用
Predicate.negate()
:tyu7yeag3#
是,创建一个
filterAndJoin
:然后把电话转到