java8集合的流式操作-实用案例(二)

1、map(Student::getStuName).distinct() 集合中对象是否存在某个字段重复

        // map(Student::getStuName).distinct() 集合中对象是否存在某个字段重复
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student(1,"张三"));
        studentList.add(new Student(2,"李四"));
        studentList.add(new Student(3,"张三"));
        // map获取某字段,与distinct().count结合,判断是否存在重复
        long count = studentList.stream().map(Student::getStuName).distinct().count();
        if (count != studentList.size()) {
            System.out.println("存在重复stuName的student");
        }

输出结果

存在重复stuName的student

2、Collectors.toMap 获取集合中重复的对象

        // Collectors.toMap 获取集合中重复的对象
        studentList = new ArrayList<>();
        Student zhangSan = new Student(1,"张三");
        studentList.add(zhangSan);
        studentList.add(new Student(2,"李四"));
        studentList.add(zhangSan);
        // 将studentList转成Map,Student为key,初始val为1,如果key相同则val相加
        // 刷选出val大于1的,输出key,即为重复的student
        List<Student> collectStu = studentList.stream()
                .collect( Collectors.toMap( key -> key, val -> 1, (a, b) -> a + b) )
                .entrySet().stream()
                .filter(entry -> entry.getValue() > 1)
                .map(entry -> entry.getKey())
                .collect(Collectors.toList());
        System.out.println(collectStu.toString());

输出结果

[stuName:张三,stuNumber:1]

3、mapToInt(List::size) 嵌套集合的数量是否一致

List<Grade> gradeList = new ArrayList<>();
        studentList = new ArrayList<>();
        studentList.add(new Student(1,"张三"));
        studentList.add(new Student(2,"李四"));
        studentList.add(new Student(3,"王五"));
        gradeList.add(new Grade(studentList,"Freshman"));
        studentList = new ArrayList<>();
        studentList.add(new Student(1,"张三"));
        studentList.add(new Student(2,"李四"));
        gradeList.add(new Grade(studentList,"Sophomore"));
        count = gradeList.stream()
                .map(Grade::getStudentList)
                .mapToInt(List::size)
                .distinct()
                .count();
        if (count > 1) {
            System.out.println("Grade中存在studentList数量不一致");
        }

输出结果

Grade中存在studentList数量不一致

4、flatMap,获取嵌套集合中的某个字段

        collectStu = gradeList.stream()
                .flatMap(grade -> grade.getStudentList().stream())
                .filter(student -> "张三".equals(student.getStuName()))
                .collect(Collectors.toList());
        System.out.println(collectStu.toString());

输出结果

[stuName:张三,stuNumber:1, stuName:张三,stuNumber:1]

实体类定义

    public static class Student{
        int stuNumber;
        String stuName;

        Student(int stuNumber,String stuName){
            this.stuName = stuName;
            this.stuNumber = stuNumber;
        }

        public String getStuName() {
            return stuName;
        }

        public int getStuNumber() {
            return stuNumber;
        }

        public String toString() {
            return "stuName:"+ this.stuName+",stuNumber:"+this.getStuNumber();
        }
    }

    public static class Grade {
        List<Student> studentList;
        String gradeName;

        Grade(List<Student> studentList,String gradeName) {
            this.gradeName = gradeName;
            this.studentList = studentList;
        }

        public List<Student> getStudentList() {
            return studentList;
        }

        public String getGradeName() {
            return gradeName;
        }

        public String toString() {
            return this.gradeName+":"+this.studentList.toString();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值