我自己使用起来比较记得住的是下面这个labmda表达式用法:
ArrayList<Integer> list = new ArrayList<>();
list.sort(((int a, int b) -> b - a); //升序
//或者复杂一点的,一个字符串数组列表的数组列表,按照其元素(也就是字符串的数组列表)的长度排序。
ArrayList<ArrayList<String>> outlist = new ArrayList<>();
list2.sort((ArrayList<String> inlist1, ArrayList<String> inlist2) -> inlist2.size() - inlist1.size()); // 升序
比较正规一点的用法就是new 一个Comparator出来,中规中矩:
ansList.sort(new Comparator<ArrayList<Integer>>() {
@Override
public int compare(ArrayList<Integer> o1, ArrayList<Integer> o2) {
return o2.size() - o1.size();
}
});
另外 Comparator类有自己的静态方法,比如 Comparator.comparingInt(),看起来更为简洁,短短的一行,但是用起来可能有点花里胡哨的感觉,还有两个冒号。。说实话我之前没在java里见过两个冒号的用法,可能是自己太孤陋寡闻了:
ansList.sort(Comparator.comparingInt(ArrayList::size));
下面是Java比较器的详细用例,转载自 https://blog.csdn.net/lengguoxing/article/details/78415024:
import java.util.*;
import java.util.stream.Collectors;
/**
* Comparator比较器的使用
*/
public class Test12Comparator {
public static void main(String[] args) {
List<String> list = Arrays.asList("nihao", "hi", "hello", "welcome");
//升序排序,流的写法
//list.stream().sorted(Comparator.comparing(str -> str)).collect(Collectors.toList()).forEach(System.out::println);
//升序排序,默认写法
/*Collections.sort(list);
System.out.println("list = " + list);*/
//自定义排序器,默认写法
/*Collections.sort(list, (item1, item2) -> item1.length() - item2.length()); //升序
Collections.sort(list, (item1, item2) -> item2.length() - item1.length()); //降序
System.out.println("list = " + list);*/
//自定义排序器,Comparator写法
/*Collections.sort(list, Comparator.comparingInt(str -> str.length())); //升序
Collections.sort(list, Comparator.comparingInt(str -> str.length()).reversed()); //降序,会报错,因为编译器在这里无法推断str的类型为String,而是推断出事一个Objcet
Collections.sort(list, Comparator.comparingInt((String str) -> str.length()).reversed());*/ //降序,显示的指定一个类型
//自定义排序器,Comparator写法2
/*Collections.sort(list, Comparator.comparingInt(String::length)); //升序
Collections.sort(list, Comparator.comparingInt(String::length).reversed()); //降序
System.out.println("list = " + list);*/
//直接调用list的排序方法,Collections.sort()本质还是调用list.sort方法
/*list.sort(Comparator.comparingInt(String::length)); //升序
list.sort(Comparator.comparingInt(String::length).reversed()); //降序*/
/**两层排序:先按照长度排序,再按照字符串顺序**/
//Collections.sort(list, Comparator.comparingInt(String::length).thenComparing(String.CASE_INSENSITIVE_ORDER)); //不区分大小写的排序
//Collections.sort(list, Comparator.comparingInt(String::length).thenComparing(String::compareTo));
//Collections.sort(list, Comparator.comparingInt(String::length).thenComparing((item1, item2) -> item1.toLowerCase().compareTo(item2.toLowerCase())));
//Collections.sort(list, Comparator.comparingInt(String::length).thenComparing(Comparator.comparing(String::toLowerCase)));
//Collections.sort(list, Comparator.comparingInt(String::length).thenComparing(Comparator.comparing(String::toLowerCase, Comparator.reverseOrder())));
Collections.sort(list, Comparator.comparingInt(String::length).thenComparing(Comparator.comparing(String::toLowerCase, Comparator.reverseOrder())).
thenComparing(Comparator.reverseOrder()));//和上一个结果是一样的,因为已经排好序了,最后一个就不起作用了
System.out.println("list = " + list);
}
}