方式一:?調用List接口自己的sort方法排序
public static void main(String[] args) {List<Integer> numList=new ArrayList<>();numList.add(999);numList.add(123);numList.add(456);numList.add(66);numList.add(9);Collections.sort(numList); //使用Collections類的方法排序numList.sort(new Comparator<Integer>() {//使用List接口的方法排序@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}});//lambda表達式實現List接口sort方法排序numList.sort((num1,num2)->{return num1.compareTo(num2);});System.out.println(numList);}
方式二:使用java.util.Collections類的sort(List list)方法
public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setAge(12);numList.add(u);User u1=new User();u1.setAge(34);numList.add(u1);User u2=new User();u2.setAge(6);numList.add(u2);User u3=new User();u3.setAge(99);numList.add(u3);//Collections類的sort方法對對象集合排序,要傳集合和Comparator接口兩個參數Collections.sort(numList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {Integer age1= o1.getAge();Integer age2= o2.getAge();return age1.compareTo(age2);}});//List接口自身的sort方法對對象集合排序,重寫Comparator接口方法即可numList.sort(new Comparator<User>() {@Overridepublic int compare(User u1, User u2) {Integer age1= u1.getAge();Integer age2= u2.getAge();return age1.compareTo(age2);}});//List接口的sort方法,lambda表達式寫法numList.sort((u4,u5)->{Integer age1= u4.getAge();Integer age2= u5.getAge();return age1.compareTo(age2);});System.out.println(numList);
}
注:Collections的sort方法其實是調用了List接口自己的sort方法。
方式三:使用Stream流的sort方法
- 首先你需要list.parallelStream().sorted 進行流處理,使用parallelStream可以充分調度多核CPU。
- 使用Comparator.comparing進行排序,reversed()進行倒序排列,thenComparing進行下一個排序。
- Comparator.comparing()里面的內容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword
- 最后格式化為需要的格式 List 是.collect(Collectors.toList()) , Map是.collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))
1. 單字段排序?
根據年齡倒序排public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setAge(12);numList.add(u);User u1=new User();u1.setAge(34);numList.add(u1);User u2=new User();u2.setAge(6);numList.add(u2);User u3=new User();u3.setAge(99);numList.add(u3);numList = numList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
}
2. 多字段排序?
先對學生的班級做排序,然后同班級做倒序
public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setClass(1);u.setAge(12);numList.add(u);User u1=new User();u.setClass(1);u1.setAge(34);numList.add(u1);User u2=new User();u.setClass(2);u2.setAge(6);numList.add(u2);User u3=new User();u.setClass(2);u3.setAge(99);numList.add(u3);numList = numList.parallelStream().sorted(Comparator.comparing(User::getClass).reversed().thenComparing(User::getAge)).collect(Collectors.toList());
}
3. nullsFirst 排序
當集合中存在null元素時,可以使用針對null友好的比較器,null元素排在集合的最前面
public static void main(String[] args) {List<User> numList=new ArrayList<>();User u=new User();u.setClass(1);u.setAge(12);numList.add(u);User u1=new User();u.setClass(1);u1.setAge(34);numList.add(u1);User u2=new User();u.setClass(2);u2.setAge(6);numList.add(u2);User u3=new User();u.setClass(2);u3.setAge(99);numList.add(u3);numList = numList.parallelStream().sorted(Comparator.nullsFirst(User::getClass).reversed().thenComparing(User::getAge)).collect(Collectors.toList());
}
?