根据自定义比较器对列表进行排序,同时不更改负数的位置

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

在java中对除负数之外的整数列表进行排序,负数索引应保持相同 我尝试使用自定义比较器来实现上述条件,但失败了

list.sort((a,b)->(a<0||b<0)?0:a-b);

输入列表- 40,20,-2,0,-5,25,-3,44,24,29,38 输出列表 - 0,20,25,40,-2,-5,-3,24,29,38,44 预期输出 - 0,20,-2,24,-5,25,-3,29,38,40,44

上述基于比较器的方法有什么问题?使用比较器可以解决这个问题吗?

java
1个回答
0
投票

考虑一个类似

[-1, 3, -1, 2, -1, 1, -1]
的列表。您的方法需要一个比较器,该比较器知道 1 在 2 之前且 2 在 3 之前(以便它将按顺序对非负元素进行排序),但也相信所有这些值都等于 -1(以便它会很乐意将 (比如说)-1) 的两个副本之间的 2。根本没有办法做到这一点。

您可以采取几种方法,但最简单的是将非负元素提取到单独的列表中,对 that 列表进行排序(使用普通的比较器),然后遍历原始列表,将其非负元素替换为排序列表的元素。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.