我已经使用Arrays创建了一个Arraylist,我想按照相反的顺序按数组中的第一项进行排序。 例如:
ArrayList<int[]> arr = new ArrayList<>();
arr.add[1,500,20];
arr.add[5,30,60];
arr.add[2,10,20];
我想按照这样排序:
[5,30,60],[2,100,20],[1,500,300]
Java中有没有选项可以做到这一点?我知道Comparator,但在这种情况下我不知道如何使用它。
感谢您的帮助
答案 0 :(得分:5)
您可以实施客户Comparator
并将其与Collections.sort()
一起传递给ArrayList
。
ArrayList<int[]> arrayList = new ArrayList<>();
arrayList.add(new int[]{1,500,20});
arrayList.add(new int[]{5,30,60});
arrayList.add(new int[]{2,10,20});
// Custom `Comparator` to sort the list of int [] on the basis of first element.
Collections.sort(arrayList, new Comparator<int[]>() {
@Override
public int compare(int[] a1, int[] a2) {
return a2[0] - a1[0]; // the reverse order is define here.
}
});
// Output to STDOUT
for(int a[] : arrayList) {
for (int i: a){
System.out.print(i + "\t");
}
System.out.println();
}
输出:
5 30 60
2 10 20
1 500 20
免责声明:上述代码不会处理null
和empty array (zero size)
等极端情况。请根据您的需要妥善处理。
答案 1 :(得分:1)
使用lambdas(Java 8):
final List<int[]> result = arr.stream()
.sorted((a, b) -> Integer.valueOf(b[0]).compareTo(Integer.valueOf(a[0])))
.collect(Collectors.toList());