提问人:N.A 提问时间:9/26/2023 最后编辑:SörenN.A 更新时间:9/27/2023 访问量:52
使用 Comparator.nullsFirst 不适用于 reverse()
Using Comparator.nullsFirst not working with reverse()
问:
我正在尝试按三个值对 Car 进行排序:首先按类型排序,然后在“类型”桶中,我想按价格(从低到最高)对这些值进行排序,然后如果有任何价格相同的值,我想按年龄排序(从最新到最旧)。
但是,有些汽车的价格为零。在这些情况下,我希望所有 null 值都位于列表的末尾。
我正在尝试使用 和 ,但这些都没有做任何事情。我最终首先得到所有的空值(无论我使用哪一个),然后按价格排序的项目。我想知道这是否是因为我有否定 nullsFirst/Last 的?Comparator.nullsFirst
Comparator.nullsLast
.reverse()
这是我正在尝试的:
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());
对此有什么想法吗?
答:
1赞
N.A
9/26/2023
#1
刚刚想通了。.移动内部比较最终起作用,如下所示: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());
我不确定我是否完全理解为什么这解决了它。
评论
3赞
Sören
9/26/2023
我看不出两个代码段之间的区别。
评论