按列轻松排序 2D 列表
Easy sort list 2D by column
我是 Java 数据操作方面的新手,所以如果有人有一些好的提示,我需要一些帮助。实际上,我只是想找到一种简单的方法来对 2D 列表进行排序。
我创建了一个这样的列表:
List<int[]> A = new ArrayList<int[]>();
A.add(new int[] {0,1});
A.add(new int[] {5,40});
A.add(new int[] {7,5});
然后我想要按第二个元素排序的结果,例如:
0 -> 1
7 -> 5
5 -> 40.
我尝试了类似 Arrays.sort(A.toArray(), (int[]a, int[]b) -> a[0] - b[0]);
的方法,但它不起作用。
是否有一个简单的解决方案来对列表进行排序?
试试这个:
List<Integer[]> A = new ArrayList<>();
A.add(new Integer[] {0,1});
A.add(new Integer[] {5,40});
A.add(new Integer[] {7,5});
A.sort(Comparator.comparingInt(a -> a[1]));
for (Integer[] a : A) {
System.out.println(Arrays.toString(a));
}
你可以简单地做:
list.sort(Comparator.comparingInt(arr -> arr[1]));
或者您也可以这样做:
Collections.sort(list, Comparator.comparingInt(arr -> arr[1]));
如果你想排序成一个新的 List<int[]>
你可以使用 stream
:
List<int[]> listSorted = list.stream()
.sorted(Comparator.comparingInt(arr -> arr[1]))
.toList();
for (int i = 0; i < A.size(); i++) {
int[] temp = A.get(i);
for (int j = i + 1; j < A.size(); j++) {
int[] temp2 = A.get(j);
if (temp[1] > temp2[1]) {
A.set(i, temp2);
A.set(j, temp);
}
}
}
我是 Java 数据操作方面的新手,所以如果有人有一些好的提示,我需要一些帮助。实际上,我只是想找到一种简单的方法来对 2D 列表进行排序。
我创建了一个这样的列表:
List<int[]> A = new ArrayList<int[]>();
A.add(new int[] {0,1});
A.add(new int[] {5,40});
A.add(new int[] {7,5});
然后我想要按第二个元素排序的结果,例如:
0 -> 1
7 -> 5
5 -> 40.
我尝试了类似 Arrays.sort(A.toArray(), (int[]a, int[]b) -> a[0] - b[0]);
的方法,但它不起作用。
是否有一个简单的解决方案来对列表进行排序?
试试这个:
List<Integer[]> A = new ArrayList<>();
A.add(new Integer[] {0,1});
A.add(new Integer[] {5,40});
A.add(new Integer[] {7,5});
A.sort(Comparator.comparingInt(a -> a[1]));
for (Integer[] a : A) {
System.out.println(Arrays.toString(a));
}
你可以简单地做:
list.sort(Comparator.comparingInt(arr -> arr[1]));
或者您也可以这样做:
Collections.sort(list, Comparator.comparingInt(arr -> arr[1]));
如果你想排序成一个新的 List<int[]>
你可以使用 stream
:
List<int[]> listSorted = list.stream()
.sorted(Comparator.comparingInt(arr -> arr[1]))
.toList();
for (int i = 0; i < A.size(); i++) {
int[] temp = A.get(i);
for (int j = i + 1; j < A.size(); j++) {
int[] temp2 = A.get(j);
if (temp[1] > temp2[1]) {
A.set(i, temp2);
A.set(j, temp);
}
}
}