2024 / 7 / 20
你可以使用 JDK 8 的 Stream API 来计算 List<VehicleGoodsInfo>
列表中 goodUnitPrice
的总和。以下是示例代码:
BigDecimal totalGoodUnitPrice = goodsInfoList.stream() .map(VehicleGoodsInfo::getGoodUnitPrice) .reduce(BigDecimal.ZERO, BigDecimal::add);
详细解释
1. stream():将列表转换为流。
2. map(VehicleGoodsInfo::getGoodUnitPrice):将每个 VehicleGoodsInfo 对象的 goodUnitPrice 提取出来,生成一个包含所有 goodUnitPrice 的流。
3. reduce(BigDecimal.ZERO, BigDecimal::add):
• BigDecimal.ZERO:初始值,表示归约操作从零开始。
• BigDecimal::add:归约操作,在这里是加法,用于将流中的所有 goodUnitPrice 累加起来。
在 Java 的 Stream API 中,reduce 方法的确容易引起误解,因为它的名称来源于“归约操作”,而不是字面上的“减少”。为了更好地理解 reduce,我们需要了解它的概念和在函数式编程中的用途。
reduce 的概念
reduce 是一种常见的函数式编程操作,通常用于将集合中的所有元素组合成一个单一的结果。这个过程被称为“归约”(reduction)。归约操作可以用来实现多种聚合操作,例如求和、求积、求最小值、求最大值等。
reduce 在 Java Stream API 中的使用
在 Java 的 Stream API 中,reduce 方法将一个二元操作(比如加法、乘法等)应用于流中的每个元素,以将流中的所有元素组合成一个单一的结果。
归约操作的实际含义
在归约操作中,“减少”并不是指元素数量的减少,而是指将多个元素“归约”成一个单一的结果。因此,reduce 方法实际上是通过累加器函数逐步将元素组合起来,从而得到一个最终结果。