How to sort by two fields in Java?

后端 未结 16 1954
离开以前
离开以前 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:04

    You can use generic serial Comparator to sort collections by multiple fields.

    import org.apache.commons.lang3.reflect.FieldUtils;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    
    /**
    * @author MaheshRPM
    */
    public class SerialComparator implements Comparator {
    List sortingFields;
    
    public SerialComparator(List sortingFields) {
        this.sortingFields = sortingFields;
    }
    
    public SerialComparator(String... sortingFields) {
        this.sortingFields = Arrays.asList(sortingFields);
    }
    
    @Override
    public int compare(T o1, T o2) {
        int result = 0;
        try {
            for (String sortingField : sortingFields) {
                if (result == 0) {
                    Object value1 = FieldUtils.readField(o1, sortingField, true);
                    Object value2 = FieldUtils.readField(o2, sortingField, true);
                    if (value1 instanceof Comparable && value2 instanceof Comparable) {
                        Comparable comparable1 = (Comparable) value1;
                        Comparable comparable2 = (Comparable) value2;
                        result = comparable1.compareTo(comparable2);
                    } else {
                        throw new RuntimeException("Cannot compare non Comparable fields. " + value1.getClass()
                                .getName() + " must implement Comparable<" + value1.getClass().getName() + ">");
                    }
                } else {
                    break;
                }
            }
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return result;
    }
    }
    

提交回复
热议问题