从列表中找到最好的报价 - 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);
}