Java - 如何在列表的开头移动特定的整数?

时间:2017-08-08 10:59:34

标签: java list sorting

我正在寻找一种简单的方法来重新排序Java中整数列表中的特定元素。

例如,我有一个包含元素的列表:

0,1,2,3,4,5,6,7,8,9,10,0,2,2,2,3,3,6,6,6,...

我需要始终将所有'6'作为起始元素,然后全部为'7',然后全部为'3',然后是其他整数有序或无。所以预期的结果是:

6,6,6,7,3,3,3,0,1,2,4,5,8,9,10,0,2,2,2,...

2 个答案:

答案 0 :(得分:2)

您可以在这种情况下使用通用比较器:

class CustomSorting<T> implements Comparator<T> {

    private List<T> orderList;

    public CustomSorting(T ... elements) {
        this.orderList = Arrays.asList(elements);
    }

    @Override
    public int compare(T a, T b) {
        return weight(a) - weight(b);
    }

    private int weight(T a) {
        int index = orderList.indexOf(a);
        return index >= 0 ? index : Integer.MAX_VALUE;
    }
}

用法:

    List<Integer> list = Arrays.asList(0,1,2,3,4,5,6,7,8,9,10,0,2,2,2,3,3,6,6,6);

    System.out.println(list);
    Collections.sort(list, new CustomSorting<>(6,7,3));
    System.out.println(list);

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 2, 2, 2, 3, 3, 6, 6, 6]
[6, 6, 6, 6, 7, 3, 3, 3, 0, 1, 2, 4, 5, 8, 9, 10, 0, 2, 2, 2]

答案 1 :(得分:1)

如果您已经列出了列表中的项目(而不是像您的问题中那样的字符串),您可以定义自己的比较器来对列表进行排序:

class Sort {
    public static int strangeCompare(Integer i1, Integer i2) {
        return valueOf(i2) - valueOf(i1);
    }
    private static int valueOf(Integer i) {
        switch (i.intValue()) {
        case 6: return 10;
        case 7: return 7;
        case 3: return 3;
        }
        return 1;
    }
}

然后按

排序列表
List<Integer> yourList = //...
Collections.sort(yourList, Sort::strangeCompare);