Interface Comparator
单一条件排序:
举例:
List
stus = new ArrayList
(){ { add(new Student("张三", 30)); add(new Student("李四", 20)); add(new Student("王五", 60)); } }; // 1.对学生集合按年龄进行排序 Collections.sort(stus, new Comparator
() { @Override public int compare(Student s1, Student s2) { // 升序 //return s1.getAge()-s2.getAge(); return s1.getAge().compareTo(s2.getAge()); // 降序 // return s2.getAge()-s1.getAge(); // return s2.getAge().compareTo(s1.getAge()); } }); // 2.对学生集合按姓名首字母排序 Comparator comparator = Collator.getInstance(Locale.CHINA); Collections.sort(stus, new Comparator
() { @Override public int compare(Student s1, Student s2) { return comparator.compare(s1.getName(), s2.getName()); } }); // 输出结果 ...
注: 还可以使用lambda表达式简化代码, 前提是JDK8开发环境, 如下:
List
stus = new ArrayList
(){ { add(new Student("张三", 30)); add(new Student("李四", 20)); add(new Student("王五", 60)); } }; //对学生集合按年龄进行排序 Collections.sort(stus, (s1,s2)->(s1.getAge()-s2.getAge()));
lambda表达式是JDK8新特性之一, 允许你通过表达式来代替功能接口; 细节请自行百度… 我也是刚接触, 啊哈哈, 不熟悉,谅解谅解
多条件排序:
举例:
List
stus = new ArrayList
(){ { add(new Student("张三", 30, 1)); add(new Student("李四", 20, 2)); add(new Student("王五", 40, 3)); add(new Student("赵六", 30, 4)); add(new Student("陈七", 40, 5)); add(new Student("周八", 20, 6)); } }; Collections.sort(stus,new Comparator
() { @Override public int compare(Student s1, Student s2) { int flag; // 首选按年龄升序排序 flag = s1.getAge()-s2.getAge(); if(flag==0){ // 再按学号升序排序 flag = s1.getNum()-s2.getNum(); } return flag; } }); System.out.println("年龄 学号 姓名 "); for(Student s : stus){ System.out.println(s.getAge()+" "+s.getNum()+" "+s.getName()); }
自定义条件排序
String[] order = {"语文","数学","英语","物理","化学","生物","政治","历史","地理","总分"}; final List
definedOrder = Arrays.asList(order); List
list = new ArrayList
(){ { add("总分"); add("英语"); add("政治"); add("总分"); add("数学"); } }; Collections.sort(list,new Comparator
() { @Override public int compare(String o1, String o2) { int io1 = definedOrder .indexOf(o1); int io2 = definedOrder .indexOf(o2); return io1-io2; } }); for(String s:list){ System.out.print(s+" "); }
使用lambda表达式简化代码:
Collections.sort(list, (o1, o2)->(definedOrder .indexOf(o1)-definedOrder .indexOf(o2)));
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199921.html原文链接:https://javaforall.net
