package com.cai.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * 目標,實現對List進行自定義排序 */ public class ListSort { public static void main(String[] args) { method3(); } /** * 1.直接Collections進行排序 */ public static void method1(){ List<Integer> listInteger = new ArrayList<Integer>(); listInteger.add(5); listInteger.add(8); listInteger.add(1); listInteger.add(22); Collections.sort(listInteger); System.out.println(listInteger.toString());//[1, 5, 8, 22] } /** * 2.進行實體類的排序 ,實體類實現Comparable接口,自定義排序方式 */ public static void method2(){ List<User> userList = new ArrayList<User>(); userList.add(new User("路飛",19)); userList.add(new User("香克斯",42)); userList.add(new User("大媽",50)); userList.add(new User("黑胡子",39)); userList.add(new User("凱多",49)); Collections.sort(userList); System.out.println(userList.toString()); //[User{name='路飛', age=19}, User{name='黑胡子', age=39}, User{name='香克斯', age=42}, User{name='凱多', age=49}, User{name='大媽', age=50}] } /** * Collections中的匿名內部類進行排序 */ public static void method3(){ List<User> userList = new ArrayList<User>(); userList.add(new User("路飛",19)); userList.add(new User("香克斯",42)); userList.add(new User("大媽",50)); userList.add(new User("黑胡子",39)); userList.add(new User("凱多",49)); Collections.sort(userList, new Comparator<User>() { @Override public int compare(User o1, User o2) { //這里 和 放法2 打印區分 這里用年齡降序 int dif = o1.getAge()-o2.getAge(); if(dif>0){ return -1; }else if(dif<0){ return 1; } return 0; } }); System.out.println(userList.toString()); //[User{name='大媽', age=50}, User{name='凱多', age=49}, User{name='香克斯', age=42}, User{name='黑胡子', age=39}, User{name='路飛', age=19}] } } class User implements Comparable<User>{ private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } /** * 重寫Comparable接口的compareTo方法, * 根據年齡升序排列,降序修改相減順序即可 * @param * @return */ @Override public int compareTo(User user) { return this.age-user.age; } }