使用Comparator.nullsFirst不与reverse()一起使用

问题描述 投票:0回答:1

我试图按三个值对汽车进行排序:首先按类型,然后在“类型”存储桶中我想按价格(从最低到最高)对它们进行排序,然后如果有任何价格相同的,我想排序按年龄(从新到旧)。

但是,有些汽车的价格为空。在这些情况下,我希望所有空值都位于列表的末尾。

我正在尝试使用

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());

对此有什么想法吗?

java sorting reverse comparator bucket-sort
1个回答
2
投票

刚刚想通了..在比较中移动

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());

我不确定我是否完全理解为什么这个问题能解决。

© www.soinside.com 2019 - 2024. All rights reserved.