[英]How to sort an array of pairs according to both values?
我正在嘗試使用 Java 對包含 integer 對的字符串進行排序
輸入是:
["2,0", "1,3", "2,3", "1,0", "6,4", "5,7", "10,8", "7,11", "9,11", "11,12"]
所需的 output 是:
["1,0", "1,3", "2,0", "2,3", "5,7", "6,4", "7,11", "9,11", "10,8", "11,12"]
使用比較器,它首先讀取逗號之前的字符串,將其解析為 int,然后進行比較; 然后是一個比較器,它做同樣的事情,但對於逗號后面的字符串部分:
Comparator<String> pairComparator =
Comparator.comparingInt(s -> Integer.parseInt(s.substring(0, s.indexOf(','))))
.thenComparingInt(s -> Integer.parseInt(s.substring(s.indexOf(',') + 1)));
嘗試這個。
List<String> list = List.of("2,0", "1,3", "2,3", "1,0", "6,4", "5,7", "10,8", "7,11", "9,11", "11,12");
List<String> output = list.stream()
.map(e -> new Object() {
int[] a = Stream.of(e.split(",")).mapToInt(Integer::parseInt).toArray();
String origin = e;
})
.sorted((obj1, obj2) -> Arrays.compare(obj1.a, obj2.a))
.map(obj -> obj.origin)
.collect(Collectors.toList());
System.out.println(output);
output
[1,0, 1,3, 2,0, 2,3, 5,7, 6,4, 7,11, 9,11, 10,8, 11,12]
使用循環的舊方法
String[] values = {"2,0", "1,3", "2,3", "1,0", "6,4", "5,7", "10,8", "7,11", "9,11", "11,12"};
Integer[][] pairs = new Integer[10][2];
String e[] = null;
for(int i = 0; i < values.length; i++) { // To extract the integer values
e = values[i].split(",");
pairs[i][0] = Integer.parseInt(e[0]);
pairs[i][1] = Integer.parseInt(e[1]);
}
Integer temp1;
Integer temp2;
for(int i = 0; i < pairs.length; i++) { // n^2 pass
for( int j= 0; j < pairs.length; j ++) {
if (pairs[i][0] < pairs[j][0]) {
temp1 = pairs[j][0];
temp2 = pairs[j][1];
pairs[j][0] = pairs[i][0];
pairs[j][1] = pairs[i][1];
pairs[i][0] = temp1;
pairs[i][1] = temp2;
}
else if (pairs[i][0] == pairs[j][0]) {
if (pairs[i][1] != pairs[j][1]) {;
temp2 = pairs[j][1];
pairs[j][1] = pairs[i][1];
pairs[i][1] = temp2;
}
}
} // inner for loop
} // outer for loop
for(int i = 0; i < pairs.length; i++) {
System.out.println(pairs[i][0]+","+pairs[i][1]);
}
Output
1,0
1,3
2,3
2,0
5,7
6,4
7,11
9,11
10,8
11,12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.