How to compare objects by multiple fields

后端 未结 22 3157
暖寄归人
暖寄归人 2020-11-22 00:43

Assume you have some objects which have several fields they can be compared by:

public class Person {

    private String firstName;
    private String lastN         


        
22条回答
  •  天命终不由人
    2020-11-22 01:33

    //Following is the example in jdk 1.8
    package com;
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.List;
    
    class User {
        private String firstName;
        private String lastName;
        private Integer age;
    
        public Integer getAge() {
            return age;
        }
    
        public User setAge(Integer age) {
            this.age = age;
            return this;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public User setFirstName(String firstName) {
            this.firstName = firstName;
            return this;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public User setLastName(String lastName) {
            this.lastName = lastName;
            return this;
        }
    
    }
    
    public class MultiFieldsComparision {
    
        public static void main(String[] args) {
            List users = new ArrayList();
    
            User u1 = new User().setFirstName("Pawan").setLastName("Singh").setAge(38);
            User u2 = new User().setFirstName("Pawan").setLastName("Payal").setAge(37);
            User u3 = new User().setFirstName("Anuj").setLastName("Kumar").setAge(60);
            User u4 = new User().setFirstName("Anuj").setLastName("Kumar").setAge(43);
            User u5 = new User().setFirstName("Pawan").setLastName("Chamoli").setAge(44);
            User u6 = new User().setFirstName("Pawan").setLastName("Singh").setAge(5);
    
            users.add(u1);
            users.add(u2);
            users.add(u3);
            users.add(u4);
            users.add(u5);
            users.add(u6);
    
            System.out.println("****** Before Sorting ******");
    
            users.forEach(user -> {
                System.out.println(user.getFirstName() + " , " + user.getLastName() + " , " + user.getAge());
            });
    
            System.out.println("****** Aftre Sorting ******");
    
            users.sort(
                    Comparator.comparing(User::getFirstName).thenComparing(User::getLastName).thenComparing(User::getAge));
    
            users.forEach(user -> {
                System.out.println(user.getFirstName() + " , " + user.getLastName() + " , " + user.getAge());
            });
    
        }
    
    }
    

提交回复
热议问题