利用的是 thenComparing():
升序 thenComparing(YourClass::Class's Field),
降序 thenComparing(YourClass::Class's Field, Comparator.reverseOrder())。
注意: 使用 thenComparing(YourClass::Class's Field).reversed() 的时候要注意排序要求,
如果先按照 A 字段升序 B 字段升序的话,使用 reversed() 之后的结果是对 A 降序 B 降序。
System.out.println("----------------------------------------------");
System.out.println("先按照 channelCode 升序,再按照 rate 升序排序:");
List<OrderTest> channelCodeAscRateAscList =
orderTestList.stream()
.sorted(Comparator.comparing(OrderTest::getChannelCode)
.thenComparing(OrderTest::getRate))
.collect(Collectors.toList());
channelCodeAscRateAscList.forEach(System.out::println);
结果
先按照 channelCode 将序,再按照 rate 升序将序,使用 reversed():
System.out.println("----------------------------------------------");
System.out.println("先按照 channelCode 将序,再按照 rate 将序排序,使用 reversed():");
List<OrderTest> channelCodeAscRateAscWithReversedList =
orderTestList.stream()
.sorted(Comparator.comparing(OrderTest::getChannelCode)
.thenComparing(OrderTest::getRate).reversed())
.collect(Collectors.toList());
channelCodeAscRateAscWithReversedList.forEach(System.out::println);
结果