@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
static class A {
private Long age;
private Long time;
}
public static void main(String[] args) {
List<A> lists = new ArrayList<>();
lists.add(A.builder().age(1L).time(100L).build());
lists.add(A.builder().age(2L).time(100L).build());
lists.add(A.builder().age(3L).time(101L).build());
List<A> sortLists = lists.stream().sorted(Comparator.comparing(A::getTime, Comparator.reverseOrder())
.thenComparing(A::getAge, Comparator.reverseOrder())).collect(Collectors.toList());
// 不生效的方式
// List<A> sortLists = lists.stream().sorted(Comparator.comparing(A::getTime).reversed()
// .thenComparing(A::getAge).reversed()).collect(Collectors.toList());
System.out.println(Arrays.toString(sortLists.toArray()));
}
期望是先对time进行倒序,然后time相等的数据,再对age进行倒序排序,但是结果和预期不一样,这是因为排序是从左往右进行运算的,导致最后整体倒序了,所以要改为分别在各自内部进行倒序排序。