项目实践JDK8 lambda|reduce

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 累加起来。

reduce补充知识

在 Java 的 Stream API 中,reduce 方法的确容易引起误解,因为它的名称来源于“归约操作”,而不是字面上的“减少”。为了更好地理解 reduce,我们需要了解它的概念和在函数式编程中的用途。

reduce 的概念

reduce 是一种常见的函数式编程操作,通常用于将集合中的所有元素组合成一个单一的结果。这个过程被称为“归约”(reduction)。归约操作可以用来实现多种聚合操作,例如求和、求积、求最小值、求最大值等。

reduce 在 Java Stream API 中的使用

在 Java 的 Stream API 中,reduce 方法将一个二元操作(比如加法、乘法等)应用于流中的每个元素,以将流中的所有元素组合成一个单一的结果。

归约操作的实际含义

在归约操作中,“减少”并不是指元素数量的减少,而是指将多个元素“归约”成一个单一的结果。因此,reduce 方法实际上是通过累加器函数逐步将元素组合起来,从而得到一个最终结果。