我试图按三个值对汽车进行排序:首先按类型,然后在“类型”存储桶中我想按价格(从最低到最高)对它们进行排序,然后如果有任何价格相同的,我想排序按年龄(从新到旧)。
但是,有些汽车的价格为空。在这些情况下,我希望所有空值都位于列表的末尾。
我正在尝试使用
Comparator.nullsFirst
和 Comparator.nullsLast
,但这些都没有做任何事情。我最终首先得到所有空值(无论我使用哪一个),然后按价格排序项目。我想知道是否是因为我有 .reverse()
否定了 nullsFirst/Last?
这是我正在尝试的:
cars.stream().sorted(Comparator.comparingInt((Car car) -> car.getCarMetadata().getCarType().getPriority())
.thenComparing((Car car -> car.getCarMetadata().getPrice(), Comparator.nullsLast(Double::compareTo)).reversed()
.thenComparing((Car car) -> car.getAge).reversed()).collect(Collectors.toList());
对此有什么想法吗?
刚刚想通了..在比较中移动
reversed()
最终成功了,就像这样:
cars.stream().sorted(Comparator.comparingInt((Car car) -> car.getCarMetadata().getCarType().getPriority())
.thenComparing((Car car -> car.getCarMetadata().getPrice(), Comparator.nullsLast(Double::compareTo)).reversed()
.thenComparing((Car car) -> car.getAge).reversed()).collect(Collectors.toList());
我不确定我是否完全理解为什么这个问题能解决。