To sort the objects in the collection
1.Comparator external comparator, you need to create an external object that implements Comparator interface Comparator
/** * External comparator * Sort by age ascending */ class UserComparators implements Comparator<User>{ @Override public int compare(User o1, User o2) { if(o1.age > o2.age) { return 1; }else if(o1.age < o2.age) { return -1; } return 0; } } public class User{ int age; String name; public User(int age, String name) { super(); this.age = age; this.name = name; } public static void main(String[] args) { List<User> list = new ArrayList<>(); for (int i = 0; i < 12; i++) { list.add(new User(new Random().nextInt(210), i+"name")); } System.out.println(list); Collections.sort(list, new UserComparators()); System.out.println(list); } @Override public String toString() { return "User [age=" + age + ", name=" + name + "]"; } }
2.Comparable internal comparator, the comparison needs to be implemented Comparable interface object
public class User implements Comparable<User>{ int age; String name; public User(int age, String name) { this.age = age; this.name = name; } public static void main(String[] args) { List<User> list = new ArrayList<>(); for (int i = 0; i < 12; i++) { list.add(new User(new Random().nextInt(210), i+"name")); } System.out.println(list); Collections.sort(list); System.out.println(list); } /** * Internal comparator * Sort by age ascending */ @Override public int compareTo(User o) { if(this.age > o.age) { return 1; }else if(this.age < o.age) { return -1; } return 0; } @Override public String toString() { return "User [age=" + age + ", name=" + name + "]"; } }