这个问题在这里已经有了答案:
How do I define a method which takes a lambda as a parameter in Java 8?
(16 个回答)
How to pass a Java 8 lambda with a single parameter
(3 个回答)
How to pass a function as a parameter in Java? [duplicate]
(8 个回答)
Java 8 pass method as parameter
(2 个回答)
11 个月前关闭。
我有以下方法:
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(","));
}
...这基本上是代码重复。有没有办法可以将函数作为方法参数传递来优化它,以便对两种过滤条件都有一种方法?
最佳答案
您可以通过Predicate
在方法的过滤器中使用,这是方法中唯一不同的地方。
假设 offer.getOfferRows()
返回 List<OfferRow>
, 然后:
public String getAllDangerousProductsName(Offer offer, Predicate<OfferRow> predicate) {
return offer.getOfferRows().stream()
.filter(predicate)
.map(row -> row.getItemInformation().getOfferTexts().getName())
.collect(Collectors.joining(","));
}
用法变得相当简单:// using lambda expression
String str1 = getAllDangerousProductsName(offer, row -> row.isDangerousGood());
String str2 = getAllDangerousProductsName(offer, row -> row.isBulkyGood());
// using method reference
String str1 = getAllDangerousProductsName(offer, OfferRow::isDangerousGood);
String str2 = getAllDangerousProductsName(offer, OfferRow::isBulkyGood);
关于java - 将函数作为参数传递给 Lambda java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65630273/