文章目录
- 背景
- 实现方案
- 案例素材
- Int类型求和
- Long 类型求和
- Double 类型求和
- BigDecimal 类型求和
背景
在项目开发中经常会使用到数据统计,Java中有求和的方法,可使用Java的Stream工作流实现,记录下来,方便备查。
实现方案
可使用Java的stream实现,其对应的mapToLong、mapToInt
常见的类型有:Int、Long、Double、BigDecimal
案例素材
案例bean为【OrderInfo】
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @auth wang
* @Date 2025/1/14 21:34
**/
@Data
public class OrderInfo implements Serializable {
/**
* 订单号
*/
private String orderNo;
/**
* 订单数量
*/
private int orderNum;
/**
* 订单金额-分
*/
private Long orderAmountL;
/**
* 订单金额-元
*/
private BigDecimal orderAmountB;
/**
* 支付金额-元
*/
private Double payAmount;
}
构造list
public static void main(String[] args){
List<OrderInfo> orderList = new ArrayList<>();
OrderInfo oneOrder = new OrderInfo();
oneOrder.setOrderNum(6);
oneOrder.setOrderAmountL(600l);
oneOrder.setOrderAmountB(new BigDecimal("6.0"));
oneOrder.setPayAmount(new Double(5));
orderList.add(oneOrder);
OrderInfo twoOrder = new OrderInfo();
twoOrder.setOrderNum(8);
twoOrder.setOrderAmountL(800l);
twoOrder.setOrderAmountB(new BigDecimal("8.0"));
twoOrder.setPayAmount(new Double(8));
orderList.add(twoOrder);
int orderSum = intSum(orderList);
System.out.println("计算出来的订单数量累计为:"+orderSum);
}
Int类型求和
// 方法调用
int orderSum = intSum(orderList);
System.out.println("计算出来的订单数量累计为:"+orderSum);
// 商品数量求和
private static int intSum(List<OrderInfo> orderList){
int totalInt = orderList.stream().mapToInt(OrderInfo::getOrderNum).sum();
return totalInt;
}
调用执行结果如下所示。
Long 类型求和
// 方法调用
Long orderSum = longSum(orderList);
System.out.println("计算出来的订单金额累计为:"+orderSum);
// 商品金额求和
private static Long longSum(List<OrderInfo> orderList){
Long totalLong = orderList.stream().mapToLong(OrderInfo::getOrderAmountL).sum();
return totalLong;
}
执行代码如下所示。
Double 类型求和
Java Stream的mapToDouble方法
// 调用方法
Double orderSum = doubleSum(orderList);
System.out.println("计算出来的订单金额累计为:"+orderSum);
private static Double doubleSum(List<OrderInfo> orderList){
Double totalDouble = orderList.stream().mapToDouble(OrderInfo::getPayAmount).sum();
return totalDouble;
}
执行代码控制台输出入下所示。
BigDecimal 类型求和
Java Stream的reduce
// 调用方法
BigDecimal orderSum = bigDecimalSum(orderList);
System.out.println("计算出来的订单支付金额累计为:"+orderSum);
private static BigDecimal bigDecimalSum(List<OrderInfo> orderList){
BigDecimal totalBigDecimal = orderList.stream().map(OrderInfo::getOrderAmountB).reduce(BigDecimal.ZERO,BigDecimal::add);
return totalBigDecimal;
}
执行以上代码,控制台输入如下所示。