这是我的问题:
我有一个整数列表:7,0,2
如果我使用Collections.sort(list)
对列表进行排序,则结果为:0,2,7
但我想从排序过程中排除排除0
的列表,因此输出如下所示:2,0,7
。
有可能吗?
提前谢谢。
答案 0 :(得分:11)
你可以这样做,但不仅仅是Collections.sort()
0
整数所在的索引:0
中删除List.remove(int)
int
,其中Collections.sort()
是索引。0
List<Integer> list = ...;
int indexOf = list.indexOf(Integer.valueOf(0));
list.remove(indexOf);
Collections.sort(list);
list.add(indexOf, Integer.valueOf(0));
。在代码中,它给出了:
0
在问题编辑后更新,以处理列表中包含多个public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(7);
list.add(0);
list.add(2);
list.add(9);
list.add(0);
list.add(1);
list.add(0);
list.add(4);
Set<Integer> indexesOf = new HashSet<>();
int indexOf = -1;
int shift = 0;
while ((indexOf = list.indexOf(Integer.valueOf(0))) != -1) {
indexesOf.add(indexOf + shift++);
list.remove(indexOf);
}
Collections.sort(list);
indexesOf.stream().forEach(index -> list.add(index, Integer.valueOf(0)));
System.out.println(list);
}
的案例。
我更新了,因为这个案子要处理起来有点复杂
由于它删除了多个元素,因此索引不再是原始大小的索引。
<xpath expr="//button[@name='action_quotation_send']" position="replace"/>
<xpath expr="//button[@name='action_quotation_send']" position="replace"/>
输出:
[1,0,2,4,0,7,0,9]
答案 1 :(得分:1)
冒泡它是你的朋友!
public static void main(String[] args) {
List<Integer> list = Arrays.asList(7, 0, 2);
for (int i = 0; i < list.size() - 1; i++) {
int a = list.get(i);
for (int j = i + 1; a != 0 && j < list.size(); j++) {
int b = list.get(j);
if (b != 0 && b < a){
list.set(i, b);
list.set(j, a);
a = b; // EDITED
}
}
}
System.out.println(list);
}