从列表中找到最好的报价 - Lambda 可能吗?
Find best Offer from List - Lambda possible?
我只是在编写这段小代码以从列表中找到最便宜的报价,我想知道是否可以使用一些 lambda 函数将其编写得更优雅?
private Offer getBestOffer(List<Offer> allOffers, int amount) {
Offer bestOffer = null;
BigDecimal bestPrice = null;
for (Offer offer : allOffers) {
BigDecimal unitCosts = offer.getUnitPrice().multiply(new BigDecimal(amount));
BigDecimal completePrice = offer.getBasicCosts().add(unitCosts);
if (bestPrice == null || completePrice.compareTo(bestPrice) == -1) {
bestOffer = offer;
bestPrice = completePrice;
}
}
return bestOffer;
}
或者这真的不是 lambda 函数的好用例吗?
您可以使用此逻辑创建自定义 Comparator
,然后流式传输 allOffers
列表并根据 Comparator
:
获取其最小值
private static Offer getBestOffer(List<Offer> allOffers, int amount) {
Comparator<Offer> cmp =
Comparator.comparing(o ->
o.getBasicCosts().add(o.getUnitPrice().multiply(new BigDecimal(amount))));
return allOffers.stream().min(cmp).orElse(null);
}
我只是在编写这段小代码以从列表中找到最便宜的报价,我想知道是否可以使用一些 lambda 函数将其编写得更优雅?
private Offer getBestOffer(List<Offer> allOffers, int amount) {
Offer bestOffer = null;
BigDecimal bestPrice = null;
for (Offer offer : allOffers) {
BigDecimal unitCosts = offer.getUnitPrice().multiply(new BigDecimal(amount));
BigDecimal completePrice = offer.getBasicCosts().add(unitCosts);
if (bestPrice == null || completePrice.compareTo(bestPrice) == -1) {
bestOffer = offer;
bestPrice = completePrice;
}
}
return bestOffer;
}
或者这真的不是 lambda 函数的好用例吗?
您可以使用此逻辑创建自定义 Comparator
,然后流式传输 allOffers
列表并根据 Comparator
:
private static Offer getBestOffer(List<Offer> allOffers, int amount) {
Comparator<Offer> cmp =
Comparator.comparing(o ->
o.getBasicCosts().add(o.getUnitPrice().multiply(new BigDecimal(amount))));
return allOffers.stream().min(cmp).orElse(null);
}