排序
list排序
正序排序
List<Student> sList = studentList.stream().sorted(Comparator.comparing(Student::getId)).collect(Collectors.toList());
倒序
List<Student> sList = studentList.stream().sorted(Comparator.comparing(Student::getId).reversed()).collect(Collectors.toList());
多个排序条件
List<Student> sList = studentList.stream().sorted(Comparator.comparing(Student::getId).thenComparing(Student::getName)).collect(Collectors.toList());
预防空指针
List<Student> sList = studentList.stream().sorted(Comparator.comparing(Student::getId, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
map排序
// toMap()方法是Collections工具包中
// 正序
Map<String, Integer> sorted = map
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,
LinkedHashMap::new));
// 反序
Map<String, Integer> reserveSort= map.entrySet()
.stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
去重
list根据某个属性去重
List<Product> products = listedProduct.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Product::getOriginProductId))), ArrayList::new));
分组
简单分组
Map<String, List<P>> groupMap1 = list.stream()
.collect(Collectors.groupingBy(P::getType));
指定字段分组
Map<String, Set<String>> groupMap2 = list.stream()
.collect(Collectors.groupingBy(P::getType, Collectors.mapping(P::getName, Collectors.toSet())));
取值
可避免报错:IllegalStateException: Duplicate key xxx,key
Map<Integer, String> map = data.stream().collect(Collectors.toMap(Person::getAge, Person::getName,(value1, value2 )->{
return value2;
}));