@Data
@AllArgsConstructor
class Person {
private String name;
private Integer age;
private Integer score;
}
- sort排序能改变原集合,
- stream().sorted()的返回值才是排序后的集合,原集合不变
- Comparator.nullsLast遇到排序的字段为null时不报错且至于最后位置
- Comparator.reverseOrder():倒序排序,Comparator.naturalOrder():升序排序
- thenComparing 多个字段排序
@Test
public void testSort() {
List<Person> persons = new ArrayList<>();
persons.add(new Person("王xx", 90, 100));
persons.add(new Person("张xx", null, 108));
persons.add(new Person("李xx", 90, 120));
persons.add(new Person("老虎", 90, 78));
Comparator<Person> ageDesc = Comparator.comparing(Person::getAge, Comparator.nullsLast(Comparator.reverseOrder()));
Comparator<Person> scoreDesc = Comparator.comparing(Person::getScore, Comparator.nullsLast(Comparator.naturalOrder()));
persons.sort(ageDesc.thenComparing(scoreDesc));
log.info("persons:{}", JSON.toJSONString(persons));
}