Collections.sort(list, Comparator.comparing(ModelVO::getName,Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(ModelVO::getId,Comparator.nullsFirst(Comparator.naturalOrder())));
- Comparator.comparing(ModelVO::getName, Comparator.nullsFirst(Comparator.naturalOrder())):
ModelVO::getName
是一个方法引用,它指向ModelVO
类中的getName
方法。Comparator.nullsFirst(Comparator.naturalOrder())
创建了一个比较器,该比较器会把null
值排在非null
值之前,而同级别的非null
值则按照自然顺序排序。
- .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();
- list.stream(): 将列表转换为 Stream。
- sorted(Comparator.comparing(People::getAge) ...): 对流中的元素进行排序。
- Comparator.comparing(People::getAge): 使用
People
类的getAge
方法获取年龄,并按照自然顺序(从小到大)进行排序。 - thenComparing(People::getHeight): 如果按照年龄排序后还有元素需要区分,则按照
height
属性进行排序。 - toList(): 将排序后的流转换回一个新的列表。
按照 age
排序,如果有相同的 age
,则按照 height
从低到高进行排序。
List<People> data = list.stream().sorted(Comparator.comparing(People::getAge).thenComparing(People::getHeight).reversed()).toList();
- list.stream(): 将列表转换为 Stream。
- sorted(Comparator.comparing(People::getAge) ...): 对流中的元素进行排序。
- Comparator.comparing(People::getAge): 使用
People
类的getAge
方法获取年龄,并按照自然顺序(从小到大)进行排序。 - thenComparing(People::getHeight).reversed(): 如果按照年龄排序后还有元素需要区分,则按照
height
属性进行排序。.reversed()
表示高度是从高到低排序。 - toList(): 将排序后的流转换回一个新的列表。
首先按照 age
排序,如果有相同的 age
,则按照 height
从高到低进行排序。