BigDecimal stream流运算

BigDecimal泛型操作


		List<BigDecimal> list = new ArrayList<BigDecimal>() {{
			add(new BigDecimal("1"));
			add(new BigDecimal("2"));
			add(new BigDecimal("3"));
			add(new BigDecimal("4"));
		}};

		/**
		 * 转Double求平均值(List为空不会报错)
		 * Double doublrAverage = bigDecimalList.stream().mapToDouble(BigDecimal::doubleValue).average().orElse(0D);
		 */

		// 最大值
		BigDecimal max = list.stream().max(BigDecimal::compareTo).orElse(BigDecimal.ZERO);
		// 最小值
		BigDecimal min = list.stream().min(BigDecimal::compareTo).orElse(BigDecimal.ZERO);
		// 求和
		BigDecimal sum = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
		// 求差
		BigDecimal subTract = list.stream().reduce(BigDecimal::subtract).orElse(BigDecimal.ZERO);
		// 求乘
		BigDecimal multply = list.stream().reduce(BigDecimal::multiply).orElse(BigDecimal.ZERO);
		// 求平均值(List为空会报"/ by zero 被除数为0"错误)
		BigDecimal average = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()), 2, BigDecimal.ROUND_HALF_UP);
		
		

对象泛型BigDecimal字段操作


		List<User> list = Lists.newArrayList();

		/**
		 * 1 List为空所求结果自动返回0
		 * 2 如果所求字段可能为空需要先filter()过滤一遍
		 * BigDecimal max = savingDataList1.stream().filter(b -> ObjectUtil.isNotEmpty(b.getEnvTemp())).map(SavingData::getEnvTemp).max(BigDecimal::compareTo).orElse(BigDecimal.ZERO);
		 */
		
		// 最大值
		BigDecimal max = list.stream().map(SavingData::getEnvTemp).max(BigDecimal::compareTo).orElse(BigDecimal.ZERO);
		// 最小值
		BigDecimal min = list.stream().map(SavingData::getEnvTemp).min(BigDecimal::compareTo).orElse(BigDecimal.ZERO);
		// 求和
		BigDecimal sum = list.stream().map(SavingData::getEnvTemp).reduce(BigDecimal.ZERO, BigDecimal::add);
		// 求差
		BigDecimal subtract = list.stream().map(SavingData::getEnvTemp).reduce(BigDecimal::subtract).orElse(BigDecimal.ZERO);
		// 求乘
		BigDecimal multply = list.stream().map(SavingData::getEnvTemp).reduce(BigDecimal::multiply).orElse(BigDecimal.ZERO);
		// 求平均值(List为空会报"/ by zero 被除数为0"错误)
		BigDecimal average = list.stream().map(SavingData::getEnvTemp).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()));
		
		

对象泛型BigDecimal字段转Double类型操作


		List<User> list = Lists.newArrayList();

		/**
		 * 1 List为空所求结果自动返回0
		 * 2 如果所求字段可能为空需要先filter()过滤一遍
		 * Double max = list.stream().filter(b -> ObjectUtil.isNotEmpty(b.getEnvTemp())).mapToDouble(v -> v.getEnvTemp().doubleValue()).max().orElse(0D);
		 */
		// 最大值
		Double max = list.stream().mapToDouble(v -> v.getEnvTemp().doubleValue()).max().orElse(0D);
		// 最小值
		Double min = list.stream().mapToDouble(v -> v.getEnvTemp().doubleValue()).min().orElse(0D);
		// 求和
		Double sum = list.stream().mapToDouble(v -> v.getEnvTemp().doubleValue()).sum();
		// 求平均值(List为空不会报错)
		Double average = list.stream().mapToDouble(v -> v.getEnvTemp().doubleValue()).average().orElse(0D);
		
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值