幽兰生空谷
--绝世独自开

使用Java代码对多个字段属性去重,并返回所有字段

Oracle去重多个字段,并返回其他所有字段

业务场景:

业务需求1:需要对前端入参进行某个字段或者多个字段去重操作,防止插入重复数据。

业务需求2:多条件下抓取数据列表,需要对数据列表的某个字段或者多个字段进行去重。

例子:

对学生的姓名、年龄去重

public static class Student implements Serializable {
        private String name;
        private String age;

        private String sex;

        public Student(String name, String age, String sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAge() {
            return age;
        }

        public void setAge(String age) {
            this.age = age;
        }

        public String getSex() {
            return sex;
        }

        public void setSex(String sex) {
            this.sex = sex;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age='" + age + '\'' +
                    ", sex='" + sex + '\'' +
                    '}';
        }
    }

解决方案:

public static void main(String[] args) {
        Student student1 = new Student("11","11","0");
        Student student2 = new Student("11","22","1");
        Student student3 = new Student("11","22","0");
        Student student4 = new Student("11","33","1");
        Student student5 = new Student("22","33","0");

        List<Student> students = new ArrayList<Student>();
        students.add(student1);
        students.add(student2);
        students.add(student3);
        students.add(student4);
        students.add(student5);
        System.out.println("--------------------对象去重-----------------------");
        List<Student> collect = students.stream().distinct().collect(toList());
        for (Student student : collect) {
            System.out.println(student);
        }
        System.out.println("-------------------根据多个字段去重--------------------------");
        ArrayList<Student> collect1 = students.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
                Comparator.comparing(student -> student.getName() + student.getAge())
        )), ArrayList::new));
        for (Student student : collect1) {
            System.out.println(student);
        }

    }

输出结果集:

Tip:使用了Java8获取字段的方式,比较常用,类似前端的钩子函数,可读性比较明了,但是当你检测哪个字段被哪里地方被引用时,这样写的字段不会被检测到。

赞(3) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《使用Java代码对多个字段属性去重,并返回所有字段》
文章链接:https://www.itheibai.com/archives/1148
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

评论 抢沙发

评论前必须登录!

 

养成“打赏”的好习惯,从我做起!

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册