Java对排除特定值的整数列表进行排序

时间:2017-08-01 13:03:45

标签: java list sorting integer

这是我的问题: 我有一个整数列表:7,0,2
如果我使用Collections.sort(list)对列表进行排序,则结果为:0,2,7 但我想从排序过程中排除排除0的列表,因此输出如下所示:2,0,7
有可能吗?
提前谢谢。

编辑:我忘了提及我的3个案例: 1)列表只包含一个“0”和两个数字 2)列表包含两个“0”和一个数字 3)列表包含三个“0”而没有数字

2 个答案:

答案 0 :(得分:11)

你可以这样做,但不仅仅是Collections.sort()

  1. 在变量中检索并存储0整数所在的索引:
  2. 0中删除List.remove(int) int,其中Collections.sort()是索引。
  3. 使用0
  4. 对列表进行排序
  5. 在列表中的存储索引处添加List<Integer> list = ...; int indexOf = list.indexOf(Integer.valueOf(0)); list.remove(indexOf); Collections.sort(list); list.add(indexOf, Integer.valueOf(0));
  6. 在代码中,它给出了:

    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);
}