java 8 stream 对对象列表中某个类型为BigDecimal的属性求和怎么写
时间: 2024-03-04 10:49:23 浏览: 99
和对int类型属性求和类似,对于BigDecimal类型的属性,可以使用Java 8 Stream中的map和reduce方法来实现求和的功能。例如,假设有一个Product类,其中包含一个price属性,可以使用以下代码来计算一个Product列表中所有产品的price之和:
```java
List<Product> products = ...; // 假设已经初始化了一个产品列表
BigDecimal totalAmount = products.stream()
.map(Product::getPrice) // 将每个产品的price属性映射为一个BigDecimal Stream
.reduce(BigDecimal.ZERO, BigDecimal::add); // 对所有BigDecimal元素求和
```
其中,`Product::getPrice` 是一个方法引用,代表获取每个产品的price属性。使用 `map` 将每个产品的price属性映射为一个BigDecimal Stream,再使用 `reduce` 对BigDecimal Stream中的所有元素求和,得到一个总金额。需要注意的是,在reduce方法中要传入一个BigDecimal.ZERO作为初始值,以确保求和结果正确。
相关问题
Java 对List中的对象属性BigDecimal求和
可以使用 Java 8 中的 Stream API 来对 List 中的 BigDecimal 属性求和。具体实现可以参考以下代码:
```java
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 创建一个包含 BigDecimal 属性的对象列表
List<MyObject> list = new ArrayList<>();
list.add(new MyObject(BigDecimal.valueOf(1.23)));
list.add(new MyObject(BigDecimal.valueOf(4.56)));
list.add(new MyObject(BigDecimal.valueOf(7.89)));
// 使用 Stream API 对 BigDecimal 属性求和
BigDecimal sum = list.stream()
.map(MyObject::getBigDecimal)
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("Sum: " + sum);
}
}
class MyObject {
private BigDecimal bigDecimal;
public MyObject(BigDecimal bigDecimal) {
this.bigDecimal = bigDecimal;
}
public BigDecimal getBigDecimal() {
return bigDecimal;
}
}
```
在上面的代码中,我们首先创建了一个包含 BigDecimal 属性的对象列表 `list`,然后使用 Stream API 的 `map` 方法将列表中的每个对象映射成其 BigDecimal 属性,最后使用 `reduce` 方法对这些 BigDecimal 属性进行求和。注意,在 `reduce` 方法中,我们使用了 `BigDecimal::add` 方法作为累加器函数,以确保精度不丢失。
利用stream流对list集合中的某个BigDecimal类型的字段进行求和
可以使用 Java 8 的 Stream API 来对 List 中的 BigDecimal 字段求和,示例代码如下:
```java
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Item> items = Arrays.asList(
new Item("apple", new BigDecimal("1.50")),
new Item("banana", new BigDecimal("0.75")),
new Item("orange", new BigDecimal("2.25"))
);
BigDecimal sum = items.stream()
.map(Item::getPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("Sum of prices: " + sum);
}
static class Item {
private String name;
private BigDecimal price;
public Item(String name, BigDecimal price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public BigDecimal getPrice() {
return price;
}
}
}
```
在这个例子中,我们定义了一个包含商品名称和价格的 Item 类。然后,我们创建了一个含有三个 Item 对象的 List。接下来,我们使用 Stream API 的 `map` 方法,将每个 Item 对象的价格映射为一个 BigDecimal 对象。最后,我们使用 `reduce` 方法,将这些 BigDecimal 对象相加,得到了所有商品价格的总和。
阅读全文