在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
上述基于比较器的方法有什么问题?使用比较器可以解决这个问题吗?
考虑一个类似
[-1, 3, -1, 2, -1, 1, -1]
的列表。您的方法需要一个比较器,该比较器知道 1 在 2 之前且 2 在 3 之前(以便它将按顺序对非负元素进行排序),但也相信所有这些值都等于 -1(以便它会很乐意将 (比如说)-1) 的两个副本之间的 2。根本没有办法做到这一点。
您可以采取几种方法,但最简单的是将非负元素提取到单独的列表中,对 that 列表进行排序(使用普通的比较器),然后遍历原始列表,将其非负元素替换为排序列表的元素。