stram- list統計(求和、最大、最小、平均)java集合


轉載 小賀學習筆記

  1. list.stream().mapToDouble(User::getHeight).sum()//和
  2.   list.stream().mapToDouble(User::getHeight).max()//最大
  3.   list.stream().mapToDouble(User::getHeight).min()//最小
  4.   list.stream().mapToDouble(User::getHeight).average()//平均值

當然,除了統計double類型,還有int和long,bigdecimal需要用到reduce求和

Double示例:

public class HelloWorld {
    private static final DecimalFormat df = new DecimalFormat("0.00");//保留兩位小數點
    public static void main(String[] args) {
        Random random = new Random();
        List<User> 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 class User{
        Integer id;
        String name;
        double height;//身高
        public User(Integer id, String name, double height) {
            this.id = id;
            this.name = name;
            this.height = height;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public double getHeight() {
            return height;
        }
        public void setHeight(double height) {
            this.height = height;
        }
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", height=" + height +
                    '}';
        }
    }
}

 

BigDecimal示例:

public class HelloWorld {
    private static final DecimalFormat df = new DecimalFormat("0.00");//保留兩位小數點
    public static void main(String[] args) {
        Random random = new Random();
        List<User> 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<User> max = list.stream().max((u1, u2) -> u1.getHeight().compareTo(u2.getHeight()));
        System.out.println("身高 最大:" + df.format(max.get().getHeight()));
        Optional<User> min = list.stream().min((u1, u2) -> u1.getHeight().compareTo(u2.getHeight()));
        System.out.println("身高 最小:" + df.format(min.get().getHeight()));
 
    }
    private static class User{
        Integer id;
        BigDecimal height;//身高
 
        public User(Integer id, BigDecimal height) {
            this.id = id;
            this.height = height;
        }
 
        public Integer getId() {
            return id;
        }
 
        public void setId(Integer id) {
            this.id = id;
        }
 
        public BigDecimal getHeight() {
            return height;
        }
 
        public void setHeight(BigDecimal height) {
            this.height = height;
        }
 
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", height=" + height +
                    '}';
        }
    }
 
}

 

項目應用

/**
     * 超標率分析(點位分開查詢)多條件篩選
     */
    @Override
    public Map<String, Object> getYcshAnalysis(Map<String, Object> map)throws Exception {
        Map<String, Object> maps = new HashMap<>();
        Map<String, Object> Cbyzmap  =new HashMap<>();
        List<Ycsh> 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<String, Object> hpzl=this.getHPZLByCb(ycshs);
        maps.put("Cbyzmap", Cbyzmap);
        maps.put("hpzl", hpzl);
        //獲取每個車牌顏色對應的車輛
        maps.put("cpys", this.getClslByCpys(ycshs));
        return maps;
    }

 

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入

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM