How to sort by two fields in Java?

后端 未结 16 2214
离开以前
离开以前 2020-11-22 08:40

I have array of objects person (int age; String name;).

How can I sort this array alphabetically by name and then by age?

Which algorithm would

16条回答
  •  滥情空心
    2020-11-22 09:11

    Arrays.sort(persons, new PersonComparator());
    
    
    
    import java.util.Comparator;
    
    public class PersonComparator implements Comparator {
    
        @Override
        public int compare(Person o1, Person o2) {
            if(null == o1 || null == o2  || null == o1.getName() || null== o2.getName() ){
                throw new NullPointerException();
            }else{
                int nameComparisonResult = o1.getName().compareTo(o2.getName());
                if(0 == nameComparisonResult){
                    return o1.getAge()-o2.getAge();
                }else{
                    return nameComparisonResult;
                }
            }
        }
    }
    
    
    class Person{
        int age; String name;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

    Updated version:

    public class PersonComparator implements Comparator {
    
       @Override
       public int compare(Person o1, Person o2) {
    
          int nameComparisonResult = o1.getName().compareToIgnoreCase(o2.getName());
          return 0 == nameComparisonResult?o1.getAge()-o2.getAge():nameComparisonResult;
    
       }
     }
    

提交回复
热议问题