java list stream avg_stram- list统计(求和、最大、最小、平均)java集合

list.stream().mapToDouble(User::getHeight).sum()//和

list.stream().mapToDouble(User::getHeight).max()//最大

list.stream().mapToDouble(User::getHeight).min()//最小

list.stream().mapToDouble(User::getHeight).average()//平均值

当然,除了统计double类型,还有int和long,bigdecimal需要用到reduce求和

Double示例:

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

public static voidmain(String[] args) {

Random random= newRandom();

List list = new ArrayList<>();for(int i=1;i<=5;i++) {double weight = random.nextDouble() * 100 + 100;//随机身高:100-200

User u = new User(i, "用户-" +i, weight);

list.add(u);

}

System.out.println("用户:" +list);double sum =list.stream().mapToDouble(User::getHeight).sum();

System.out.println("身高 总和:" +df.format(sum));double max =list.stream().mapToDouble(User::getHeight).max().getAsDouble();

System.out.println("身高 最大:" +df.format(max));double min =list.stream().mapToDouble(User::getHeight).min().getAsDouble();

System.out.println("身高 最小:" +df.format(min));double average =list.stream().mapToDouble(User::getHeight).average().getAsDouble();

System.out.println("身高 平均:" +df.format(average));

}private static classUser{

Integer id;

String name;double height;//身高

public User(Integer id, String name, doubleheight) {this.id =id;this.name =name;this.height =height;

}publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public doublegetHeight() {returnheight;

}public void setHeight(doubleheight) {this.height =height;

}

@OverridepublicString toString() {return "User{" +

"id=" + id +

", name='" + name + '\'' +

", height=" + height +

'}';

}

}

}

BigDecimal示例:

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

public static voidmain(String[] args) {

Random random= newRandom();

List list = new ArrayList<>();for(int i=1;i<=5;i++) {double weight = random.nextDouble() * 100 + 100;//随机身高:100-200

list.add(new User(i, new BigDecimal(weight).setScale(BigDecimal.ROUND_HALF_UP, 2)));

}

System.out.println("list:" +list);

BigDecimal add=list.stream().map(User::getHeight).reduce(BigDecimal.ZERO, BigDecimal::add);

System.out.println("身高 总和:" +df.format(add));

Optional max = list.stream().max((u1, u2) ->u1.getHeight().compareTo(u2.getHeight()));

System.out.println("身高 最大:" +df.format(max.get().getHeight()));

Optional min = list.stream().min((u1, u2) ->u1.getHeight().compareTo(u2.getHeight()));

System.out.println("身高 最小:" +df.format(min.get().getHeight()));

}private static classUser{

Integer id;

BigDecimal height;//身高

publicUser(Integer id, BigDecimal height) {this.id =id;this.height =height;

}publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicBigDecimal getHeight() {returnheight;

}public voidsetHeight(BigDecimal height) {this.height =height;

}

@OverridepublicString toString() {return "User{" +

"id=" + id +

", height=" + height +

'}';

}

}

}

项目应用

/*** 超标率分析(点位分开查询)多条件筛选*/@Overridepublic Map getYcshAnalysis(Map map)throwsException {

Map maps = new HashMap<>();

Map Cbyzmap =new HashMap<>();

List ycshs=ycshDao.getYcshAnalysis(map);//获取每个超标因的平均值

Cbyzmap.put("CO2JGavg", new BigDecimal(ycshs.stream().mapToDouble(Ycsh::getCO2JG).average().getAsDouble()).setScale(2,RoundingMode.HALF_UP));

Cbyzmap.put("HCJGavg", new BigDecimal(ycshs.stream().mapToDouble(Ycsh::getHCJG).average().getAsDouble()).setScale(2,RoundingMode.HALF_UP));

Cbyzmap.put("COJGavg", new BigDecimal(ycshs.stream().mapToDouble(Ycsh::getCOJG).average().getAsDouble()).setScale(2,RoundingMode.HALF_UP));

Cbyzmap.put("NOJGavg", new BigDecimal(ycshs.stream().mapToDouble(Ycsh::getNOJG).average().getAsDouble()).setScale(2,RoundingMode.HALF_UP));//获取每个车牌所对应的车辆数量

Map hpzl=this.getHPZLByCb(ycshs);

maps.put("Cbyzmap", Cbyzmap);

maps.put("hpzl", hpzl);//获取每个车牌颜色对应的车辆

maps.put("cpys", this.getClslByCpys(ycshs));returnmaps;

}

BigDecimal.setScale用法

BigDecimal.setScale()这个方法是用于格式化小数点

setScale(0)表示保留整数

setScale(1)表示保留一位小数,默认用四舍五入方式

setScale(1,BigDecimal.HALF_UP)四舍五入,2.35变成2.4

setScaler(1,BigDecimal.HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

scale指的是你小数点后的位数。比如123.456则score就是3.

score()就是BigDecimal类中的方法

roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种

比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值