Java8 List统计(最大值,最小值、平均值、总和)

核心功能代码:

        Integer sum = list.stream().mapToInt(User::getAge).sum();
        System.out.println("年龄总和:" +sum);
        Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
        System.out.println("年龄 最大:" + max);
        Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
        System.out.println("年龄 最小:" + min);
        Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
        System.out.println("年龄 平均:" + df.format(average));

Java8 Stream除了支持Int类型,还支持double 类型和long类型

 学生年龄实例:

package com.digipower.test;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class ListTest {
	private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点

	public static void main(String[] args) {
		Random random = new Random();
		List<User> list = new ArrayList<User>();
		for (int i = 1; i <= 5; i++) {
			int age = random.nextInt(10) + 5;// 随机年龄:10-15
			User u = new User(String.valueOf(i), "用户-" + i, age);
			list.add(u);
		}
		Integer sum = list.stream().mapToInt(User::getAge).sum();
        System.out.println("年龄总和:" +sum);
        Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
        System.out.println("年龄 最大:" + max);
        Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
        System.out.println("年龄 最小:" + min);
        Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
        System.out.println("年龄 平均:" + df.format(average));
	}

	static class User {
		private String id;
		private String name;
		private int age;

		public String getId() {
			return id;
		}

		public void setId(String id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public int getAge() {
			return age;
		}

		public void setAge(int age) {
			this.age = age;
		}

		public User(String id, String name, int age) {
			super();
			this.id = id;
			this.name = name;
			this.age = age;
		}

	}

}

效果截图:

溫馨提示:針對金融数据类型BigDecimal,求和方式必须使用Stream 类中的reduce函数

学生余额实例:

package com.digipower.test;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;

public class ListTest {
	private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点

	public static void main(String[] args) {
		Random random = new Random();
		List<User> list = new ArrayList<User>();
		for (int i = 1; i <= 5; i++) {
			int age = random.nextInt(10) + 5;// 随机年龄:10-15
			User u = new User(String.valueOf(i), "用户-" + i, age);
			double balance = random.nextDouble() * 100 + 100;//随机金额:100-200
			u.setBalance(new BigDecimal(balance).setScale(BigDecimal.ROUND_HALF_UP, 2));
			list.add(u);
		}
		Integer sum = list.stream().mapToInt(User::getAge).sum();
        System.out.println("年龄总和:" +sum);
        Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
        System.out.println("年龄 最大:" + max);
        Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
        System.out.println("年龄 最小:" + min);
        Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
        System.out.println("年龄 平均:" + df.format(average));
        
        BigDecimal add = list.stream().map(User::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
        System.out.println("金额 总和:" + df.format(add));
        Optional<User> maxBalance = list.stream().max((u1, u2) -> u1.getBalance().compareTo(u2.getBalance()));
        System.out.println("金额 最高:" + df.format(maxBalance.get().getBalance()));
        Optional<User> minBalance = list.stream().min((u1, u2) -> u1.getBalance().compareTo(u2.getBalance()));
        System.out.println("金额 最低:" + df.format(minBalance.get().getBalance()));
	}

	static class User {
		private String id;
		private String name;
		private int age;
		private BigDecimal balance;

		public String getId() {
			return id;
		}

		public void setId(String id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public int getAge() {
			return age;
		}

		public void setAge(int age) {
			this.age = age;
		}
		
		

		public BigDecimal getBalance() {
			return balance;
		}

		public void setBalance(BigDecimal balance) {
			this.balance = balance;
		}

		public User(String id, String name, int age) {
			super();
			this.id = id;
			this.name = name;
			this.age = age;
		}

	}

}

效果截图

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获取 `List<BigDecimal>` 中元素的最大值最小值平均值,你可以使用 `Collections` 类或者流(Stream)来完成。以下是两种不同的实现方式: 1. 使用 `Collections` 类: ```java import java.math.BigDecimal; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<BigDecimal> bigDecimalList = Arrays.asList( new BigDecimal("1.23"), new BigDecimal("4.56"), new BigDecimal("7.89") ); // 获取最大值 BigDecimal max = Collections.max(bigDecimalList); System.out.println("最大值: " + max); // 获取最小值 BigDecimal min = Collections.min(bigDecimalList); System.out.println("最小值: " + min); // 获取平均值 BigDecimal sum = BigDecimal.ZERO; for (BigDecimal num : bigDecimalList) { sum = sum.add(num); } BigDecimal average = sum.divide(BigDecimal.valueOf(bigDecimalList.size()), 2, BigDecimal.ROUND_HALF_UP); System.out.println("平均值: " + average); } } ``` 在上述示例中,我们创建了一个 `List<BigDecimal>`,名为 `bigDecimalList`,其中包含了几个 `BigDecimal` 对象。然后,我们使用 `Collections.max` 和 `Collections.min` 方法分别获取列表中的最大值最小值。对于平均值的计算,我们使用一个循环来累加列表中的元素,并使用 `divide` 方法将总和除以列表的大小来计算平均值。 运行以上代码,输出将会是: ``` 最大值: 7.89 最小值: 1.23 平均值: 4.26 ``` 2. 使用流(Stream): ```java import java.math.BigDecimal; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<BigDecimal> bigDecimalList = Arrays.asList( new BigDecimal("1.23"), new BigDecimal("4.56"), new BigDecimal("7.89") ); // 获取最大值 BigDecimal max = bigDecimalList.stream() .max(BigDecimal::compareTo) .orElse(BigDecimal.ZERO); System.out.println("最大值: " + max); // 获取最小值 BigDecimal min = bigDecimalList.stream() .min(BigDecimal::compareTo) .orElse(BigDecimal.ZERO); System.out.println("最小值: " + min); // 获取平均值 BigDecimal sum = bigDecimalList.stream() .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal average = sum.divide(BigDecimal.valueOf(bigDecimalList.size()), 2, BigDecimal.ROUND_HALF_UP); System.out.println("平均值: " + average); } } ``` 在这个示例中,我们使用流的 `max` 和 `min` 方法来获取列表中的最大值最小值。对于平均值的计算,我们使用 `reduce` 方法将列表中的元素累加起来,并使用 `divide` 方法计算平均值。 运行以上代码,输出将会是相同的结果: ``` 最大值: 7.89 最小值: 1.23 平均值: 4.26 ``` 希望能对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值