Collections.sort(list, Comparator.comparing(ModelVO::getName,Comparator.nullsFirst(Comparator.naturalOrder()))
   .thenComparing(ModelVO::getId,Comparator.nullsFirst(Comparator.naturalOrder())));
  1. Comparator.comparing(ModelVO::getName, Comparator.nullsFirst(Comparator.naturalOrder())):
  • ModelVO::getName 是一个方法引用,它指向 ModelVO 类中的 getName 方法。
  • Comparator.nullsFirst(Comparator.naturalOrder()) 创建了一个比较器,该比较器会把 null 值排在非 null 值之前,而同级别的非 null 值则按照自然顺序排序。
  1. .thenComparing(ModelVO::getId, Comparator.nullsFirst(Comparator.naturalOrder())):
  • 如果第一个比较器无法区分两个对象(即两个对象的 getName 相等),则使用第二个比较器 ModelVO::getId 进行进一步的排序。
  • 同样地,这里也使用了 Comparator.nullsFirst(Comparator.naturalOrder()) 来确保 null 值优先。

首先按照 name 排序,并将 null 放在首位;如果有相同的 name,则进一步按照 id 排序,同样也是 null 在前。


List<People> data = list.stream().sorted(Comparator.comparing(People::getAge).thenComparing(People::getHeight)).toList();
  1. list.stream(): 将列表转换为 Stream。
  2. sorted(Comparator.comparing(People::getAge) ...): 对流中的元素进行排序。
  3. Comparator.comparing(People::getAge): 使用 People 类的 getAge 方法获取年龄,并按照自然顺序(从小到大)进行排序。
  4. thenComparing(People::getHeight): 如果按照年龄排序后还有元素需要区分,则按照 height 属性进行排序。
  5. toList(): 将排序后的流转换回一个新的列表。

按照 age 排序,如果有相同的 age,则按照 height 从低到高进行排序。

List<People> data = list.stream().sorted(Comparator.comparing(People::getAge).thenComparing(People::getHeight).reversed()).toList();
  1. list.stream(): 将列表转换为 Stream。
  2. sorted(Comparator.comparing(People::getAge) ...): 对流中的元素进行排序。
  3. Comparator.comparing(People::getAge): 使用 People 类的 getAge 方法获取年龄,并按照自然顺序(从小到大)进行排序。
  4. thenComparing(People::getHeight).reversed(): 如果按照年龄排序后还有元素需要区分,则按照 height 属性进行排序。.reversed() 表示高度是从高到低排序。
  5. toList(): 将排序后的流转换回一个新的列表。

首先按照 age 排序,如果有相同的 age,则按照 height 从高到低进行排序。