Java中计算List求和或List对象中某个字段的总和

Java中计算List求和或List对象中某个字段的总和

发布:2023-08-20     分类:闲者编程     标签:JavaList
2023 - 8 - 19

一. 使用循环遍历List对象,累加求和

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = 0;
for (int number : numbers) {
    sum += number;
}
System.out.println("List总和:" + sum);

如果要计算List中某个字段的总和,假设有一个包含Person对象的List,每个Person对象有一个age字段:

List<Person> persons = Arrays.asList(
    new Person("John", 25),
    new Person("Jane", 30),
    new Person("Mike", 35)
);
int sum = 0;
for (Person person : persons) {
    sum += person.getAge();
}
System.out.println("年龄总和:" + sum);

二. Java 8的Stream API,list stream:计算对象List中某个字段的总和

1. 计算一个number类型的List对象总和

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().mapToInt(Integer::intValue).sum();
System.out.println("List总和:" + sum);

或者

Integer[] integerArray = {1, 3, 5, 10, 18};

List<Integer> list = new ArrayList<>(Arrays.asList(integerArray));

IntSummaryStatistics summaryStatistics = list.stream().mapToInt((s) -> s).summaryStatistics();
System.out.println("总和:" + summaryStatistics.getSum());
System.out.println("平均数:" + summaryStatistics.getAverage());
System.out.println("总个数:" + summaryStatistics.getCount());
System.out.println("最大值:" + summaryStatistics.getMax());
System.out.println("最小值:" + summaryStatistics.getMin());

2. 计算一个List对象中某个字段总和

List<Person> persons = Arrays.asList(
    new Person("John", 25),
    new Person("Jane", 30),
    new Person("Mike", 35)
);
int sum = persons.stream().mapToInt(Person::getAge).sum();
System.out.println("年龄总和:" + sum);

或者

List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setAge(10);
userList.add(user1);
User user2 = new User();
user2.setAge(20);
userList.add(user2);
User user3 = new User();
user3.setAge(25);
userList.add(user3);

int ageSum = userList.stream().collect(Collectors.summingInt(User::getAge));
System.out.println("年龄总和 :" + ageSum);

3. Java Stream 计算总和 Stream聚合函数对BigDecimal求和

 BigDecimal sum = selectList.stream().map(SxLoss::getLossAmount).reduce(BigDecimal.ZERO, BigDecimal::add);

注意:有可能会报错,因为对象中某个值为空,因此需要增加判断

 BigDecimal sum = selectList.stream().map(SxLoss::getLossAmount).filter(lossAmount -> lossAmount != null).reduce(BigDecimal.ZERO, BigDecimal::add);

注:以上几种方法都可以计算List的总和或List对象中某个字段的总和。选择使用哪种方法取决于具体的需求和使用的Java版本。

更新:2023-08-20
点击评论
评论区