import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Test { public static void main(String[] args){ List<User> list = initList(); //JDK8之前的排序 Collections.sort(list, new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getAge().compareTo(o2.getAge()); } }); //JDK8中 lambda排序,带类型参数 list = initList(); list.sort((User u1,User u2)->u1.getAge().compareTo(u2.getAge())); list.forEach(System.out::println); System.out.println(); //JDK8中 lambda排序,不带类型参数 list = initList(); list.sort(( u1, u2)->u1.getAge().compareTo(u2.getAge())); list.forEach(System.out::println); System.out.println(); //JDK8 升序排序, Comparator提供的静态方法 list = initList(); // Collections.sort(list,Comparator.comparing(User::getAge)); list.sort(Comparator.comparing(User::getAge)); list.forEach(System.out::println); System.out.println(); //JDK8 降序排序, Comparator提供的静态方法 list = initList(); // Collections.sort(list,Comparator.comparing(User::getAge).reversed()); list.sort(Comparator.comparing(User::getAge).reversed()); list.forEach(System.out::println); System.out.println(); //JDK8组合排序,先按年纪排序,年纪相同按名字排序 list = initList(); // Collections.sort(list,Comparator.comparing(User::getAge).thenComparing(User::getUsername)); list.sort(Comparator.comparing(User::getAge).thenComparing(User::getUsername)); list.forEach(System.out::println); System.out.println(); } private static List<User> initList(){ List<User> list = new ArrayList<>(); list.add(new User("lisa",23)); list.add(new User("tom",19)); list.add(new User("jack",22)); list.add(new User("lucy",24)); list.add(new User("mack",26)); return list; } } class User implements Comparator<User>{ private String username; private Integer age; @Override public int compare(User o1, User o2) { return o1.getAge()-o2.getAge(); } public User(String username, int age) { this.username = username; this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "age "+getAge()+"\tname "+getUsername(); } }
进化版:
list.sort(( u1, u2)->u1.getAge().compareTo(u2.getAge()));
究极进化版:
list.sort(Comparator.comparing(User::getAge));
list.sort(Comparator.comparing(User::getAge).reversed());
list.sort(Comparator.comparing(User::getAge).thenComparing(User::getUsername));