作者:风清淡雅的梦 | 来源:互联网 | 2023-01-27 12:11
这是我的问题:我有一个整数列表:7,0,2
如果我使用Collections.sort(list)
结果排序列表是:0,2,7
但我想排序列表排除0
排序过程,所以输出如下所示:2,0,7
.
可能吗?
提前致谢.
编辑:我忘了提到我的3种可能的情况:1)列表只包含一个"0"和两个数字2)列表包含两个"0"和一个数字3)列表包含三个"0"而没有数字
1> davidxxx..:
你可以这样做但不仅仅是 Collections.sort()
在变量中检索并存储0
Integer 所在的索引:
0
从列表中删除索引List.remove(int)
所在的位置int
.
使用排序列表 Collections.sort()
0
在存储索引的列表中添加.
在代码中,它给出:
List 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 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 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);
}
输出:
[1,0,2,4,0,7,0,9]