How to compare objects by multiple fields

后端 未结 22 2856
暖寄归人
暖寄归人 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:22

    Code implementation of the same is here if we have to sort the Person object based on multiple fields.

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class Person {
    
    private String firstName;
    private String lastName;
    private int age;
    
    public String getFirstName() {
        return firstName;
    }
    
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    
    public String getLastName() {
        return lastName;
    }
    
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }
    
    
    static class PersonSortingComparator implements Comparator {
    
        @Override
        public int compare(Person person1, Person person2) {
    
            // for first name comparison
            int firstNameCompare = person1.getFirstName().compareTo(person2.getFirstName());
    
            // for last name comparison
            int lastNameCompare = person1.getLastName().compareTo(person2.getLastName());
    
            // for last name comparison
            int ageCompare = person1.getAge() - person2.getAge();
    
            // Now comparing
            if (firstNameCompare == 0) {
                if (lastNameCompare == 0) {
                    return ageCompare;
                }
                return lastNameCompare;
            }
            return firstNameCompare;
        }
    }
    
    public static void main(String[] args) {
        Person person1 = new Person("Ajay", "Kumar", 27);
        Person person2 = new Person("Ajay","Gupta", 23);
        Person person3 = new Person("Ajay","Kumar", 22);
    
    
        ArrayList persons = new ArrayList<>();
        persons.add(person1);
        persons.add(person2);
        persons.add(person3);
    
    
        System.out.println("Before Sorting:\n");
        for (Person person : persons) {
            System.out.println(person.firstName + " " + person.lastName + " " + person.age);
        }
    
        Collections.sort(persons, new PersonSortingComparator());
    
        System.out.println("After Sorting:\n");
        for (Person person : persons) {
            System.out.println(person.firstName + " " + person.lastName + " " + person.age);
        }
    }
    
    }
    

提交回复
热议问题