zoukankan      html  css  js  c++  java
  • 记录一下最近工作中使用到的一些stream用法

    一.准备

    实体类:

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Stu {
    
        private Integer cid;
        private Integer id;
        private String name;
        private Integer aScore;
        private Integer bScore;
        private Integer dScore;
    
    }

    vo类:

      @Data
        public class Vo{
            private Integer cid;
            private Integer aScore;
            private Integer bScore;
            private Integer cScore;
        }

    集合:

        Stu stu1 = new Stu(1,1,"张飞",50,24,33);
        Stu stu2 = new Stu(1,2,"王飞",50,24,12);
        Stu stu3 = new Stu(1,3,"李飞",30,34,33);
        Stu stu4 = new Stu(2,4,"李飞",60,1,67);
        Stu stu5 = new Stu(2,5,"张飞",70,77,32);
        List<Stu> stus = Arrays.asList(stu1,stu2,stu3,stu4,stu5);

    二:希望Stu按cid分组,然后求得分组后,所有分数的总和,并封装到Vo中,返回一个VoList

        @Test
        public void test(){
            //public Stu(Integer cid, Integer id, String name, Integer aScore, Integer bScore, Integer dScore) {
            //希望Stu按cid分组,然后求得分组后,所有分数的总和,并封装到Vo中,返回一个VoList
            Map<Integer, List<Stu>> collect = stus.stream().collect(Collectors.groupingBy(Stu::getCid));
            List<Vo> vos = collect.values().stream().map((List<Stu> stuList) -> {
                Vo vo = new Vo();
                vo.setCid(stuList.get(0).getCid());
                vo.setAScore(stuList.stream().map(Stu::getAScore).reduce(Integer::sum).get());
                vo.setBScore(stuList.stream().map(Stu::getBScore).reduce(Integer::sum).get());
                vo.setCScore(stuList.stream().map(Stu::getDScore).reduce(Integer::sum).get());
                return vo;
            }).sorted(Comparator.comparing(Vo::getBScore).reversed()).collect(Collectors.toList());
    
            System.out.println(vos);
        }

    运行结果:

     三.对对象进行去重,去重条件是对象的某一属性

        @Test
        public void test2(){
            //希望对stus这一集合进行去重,去重条件是根据Stu的Name属性
            List<Stu> s = stus.stream()
                    .collect(Collectors.collectingAndThen(
                            Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(Stu::getName))), ArrayList::new));
        s.forEach(System.out::println);
    }

    运行结果:

     四:无法描述

    @Test
        public void test3(){
            //希望获取一个map,key是stu的id,value是A分数和B分数的List
            Map<Integer,List<Integer>> scoreMap = stus.stream().collect(Collectors.toMap(Stu::getId,stu->{
                List<Integer> scores = new ArrayList<>();
                scores.add(stu.getAScore());
                scores.add(stu.getBScore());
                return scores;
            }));
            System.out.println(scoreMap);
        }

    运行结果:

     等待后续。。。。。

  • 相关阅读:
    结对-结对编项目作业名称-开发环境搭建过程
    课后作业-阅读任务-阅读提问-3
    团队-象棋游戏-项目进度
    结对-五子棋游戏-测试过程
    课后作业-阅读任务-阅读提问2
    201501006-构建之法:现代软件工程-阅读笔记
    结对编程-五子棋游戏-开发过程
    象棋游戏,代码规范
    结编程队-五子棋游戏-项目进度
    《个人-GIT使用方法》
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12623012.html
Copyright © 2011-2022 走看看