2017-08-08 11 views
0

我正在寻找一种简单的方法来重新排列Java中整数列表中的特定元素。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,... 
+1

我不知道你在找什么。你能用预期的结果编辑你的问题吗? – tobifasc

+1

提供自定义比较器并执行任何您想要的操作。 – Thomas

+0

定制的比较器可能是? – prime

回答

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

如果你有一个列表中的项目已经(而不是作为一个字符串,因为它看起来像你的问题),你可以定义自己的比较器对列表进行排序:

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); 
+0

@RobinTopper我认为'return's会做得很好;) – daniu

+0

不需要任何中断,因为所有语句都有返回。在它之后添加一个中断,会给你一个指向“死代码”的错误 –

相关问题