我创建了一个要根据第二列排序的2D数组。我检查了其他变体,但是它们似乎不起作用。
此刻数据作为第一组出现,我想得到第二组。
0 0 0 0
1 1065 6 24
2 70 3 60
3 60 2 70
4 90 4 90
5 251 5 251
6 24 7 558
7 558 1 1065
此刻我的代码是:
import java.util.Arrays;
import java.util.Comparator;
public class Testing {
public static void test() {
int[][] arrayToSort = {{0, 1,2,3,4,5,6,7}, {0, 1065, 70, 60,90,251,24,558}};
}
public static void sortArray(int myArray[][]) {
Arrays.sort(myArray, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return Integer.valueOf(o1[1]).compareTo(Integer.valueOf(o2[1]));
}
});
}
}
答案 0 :(得分:0)
您可以使用TreeMap将数组的第二行存储为键,并将第一行存储为值。
由于key的值是整数,因此您无需创建任何新的Comparator / Comparable类即可对其进行排序。 TreeMap将自动按升序存储它们。
public static void main(String[] args) {
int[][] ax = {{0, 1,2,3,4,5,6,7},
{0, 1065, 70, 60,90,251,24,558} };
Map<Integer,Integer> map = new TreeMap<>();
for (int i = 0; i < ax[0].length; i++) {
map.put(ax[1][i], ax[0][i] );
}
// Iterate over the TreeMap to get as per your wish order
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey()
+ " Value : " + entry.getValue());
}
}
答案 1 :(得分:-1)
您的方法是对外部数组进行排序-仅包含两个元素(即数组)。将您的问题想象成具有两个单独的数组:{0,1,2,3,4,5,6,7}
和{0,1065,70,60,90,251,24,558}
。然后,您的问题是对第二个数组进行排序,并在第一个数组中进行相同的交换。我要说的是,您的数据结构通常不适用于此任务。考虑改用对表:
public class Testing {
private static class MyNumber {
private final int id;
private final int number;
public MyNumber(int id, int number) {
this.id = id;
this.number = number;
}
public int getId() {
return id;
}
public int getNumber() {
return number;
}
}
public static void main(String[] args) {
int[][] arrayToSort = {
{0, 1, 2, 3, 4, 5, 6, 7 },
{0, 1065, 70, 60, 90, 251, 24, 558}
};
List<MyNumber> list = IntStream.range(0, arrayToSort[0].length)
.mapToObj(i -> new MyNumber(arrayToSort[0][i], arrayToSort[1][i]))
.collect(toList());
Collections.sort(list, Comparator.comparing(MyNumber::getNumber));
for (MyNumber myNumber : list) {
System.out.println(myNumber.getId() + " " + myNumber.getNumber());
}
}
}