Sorting ArrayList of Objects by Object attribute

前端 未结 2 645
南旧
南旧 2020-12-01 13:15

I am having an Arraylist of Objects. Those object have an attribute or datatype - \'String\'. I need to sort the Arraylist by that string. How to achieve this?

相关标签:
2条回答
  • 2020-12-01 13:53

    Another good way of doing this that is a bit more flexible if there is more than one property of an object that you may wish to sort by is to use Guava's Ordering class with its onResultOf(Function) option. This is ideally suited for sorting by properties since a Function can be used to retrieve and return a specific property of an object. For a simple example, imagine a class Person with String getFirstName() and String getLastName() methods.

    List<Person> people = ...;
    Collections.sort(people, Ordering.natural().onResultOf(
        new Function<Person, String>() {
          public String apply(Person from) {
            return from.getFirstName();
          }
        }));
    

    The above will sort the list by first name.

    To make it read nicer, you may want to define the functions you might want to use as public static final fields on the Person class. Then you could sort by last name like this:

    Collections.sort(people, Ordering.natural().onResultOf(Person.GET_LAST_NAME));
    

    As a fun aside note, this will all be a lot easier in Java 8 with lambda expressions and method references. You'll be able to write something like this without having to define any clumsy anonymous inner classes or static final fields:

    import static java.util.Comparator.comparing;
    ...
    
    people.sort(comparing(Person::getLastName));
    
    0 讨论(0)
  • 2020-12-01 14:05

    You need to write a Comparator<MyObject> and use Collections.sort(List<T>, Comparator<? super T> to sort your List.

    Or else, your MyObject can also implements Comparable<MyObject>, defining a natural ordering that compares on your specific attribute, and then use Collections.sort(List<T> instead.

    See also

    • Java Tutorials/Object Ordering

    Related questions

    On sorting List on various criteria:

    • Sorting an ArrayList of Contacts

    On Comparator and Comparable

    • When to use Comparable vs Comparator
    • difference between compare() and compareTo()
    • Comparable and Comparator contract with regards to null
    • Why does the Java Collections Framework offer two different ways to sort?
    0 讨论(0)
提交回复
热议问题