java---排序

124 阅读1分钟
@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));
}