我想要在Java中构建一个方法,根据多个给定列中的值对数组进行排序。让我用一个例子(矩阵数组)解释一下:
int matrix[][] = {
{0,2,432},{1,1,282},{2,2,456},{3,4,191},{4,5,293},
{5,2,475},{6,2,491},{7,5,171},{8,5,134},{9,3,354}};我需要按照第二个位置按递减顺序对每一个三重奏进行排序。在那之后,我需要按照第三个位置按增加的顺序排列三重奏。
我所使用的代码是:
import java.util.*;
public class sort2DMatrixByColumn {
// Function to sort by column
public static void sortByColumn(int arr[][], int col) {
// Using built-in sort function Arrays.sort
Arrays.sort(arr, new Comparator<int[]>() {
@Override
// Compare values according to columns
public int compare(final int[] entry1,
final int[] entry2) {
if (entry1[col] < entry2[col])
return 1;
else
return -1;
}
}); // End of function call sort().
}
// Driver Code
public static void main(String args[]) {
int matrix[][] = {
{0,2,432},{1,1,282},{2,2,456},{3,4,191},{4,5,293},
{5,2,475},{6,2,491},{7,5,171},{8,5,134},{9,3,354}};
// Sort this matrix by 2rd Column
int col = 2;
sortByColumn(matrix, col - 1);
// Display the sorted Matrix
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++)
System.out.print(matrix[i][j] + " ");
System.out.println();
}
}
}前面描述的代码的输出是:
[[8,5,134],[7,5,171],[4,5,293],[3,4,191],[9,3,354],
[6,2,491],[5,2,475],[2,2,456],[0,2,432],[1,1,282]]但所需的产出必须是:
[[8,5,134],[7,5,171],[4,5,293],[3,4,191],[9,3,354],
[0,2,432],[2,2,456],[5,2,475],[6,2,491],[1,1,282]]请注意,根据第二个位置,我们有以下位置:5,5,5,4,3,2,2,2,2,2,1(递减顺序),根据第三个位置,顺序是: 134,171,293 (第二位置为"5“的三胞胎),191 (第二位置为"4”的三胞胎),354 (第二位置为"3“的三胞胎),432,456,475,491 (第二位置为"2”的三胞胎),最后282为第二位置为"1“的三胞胎。
任何帮助都将不胜感激。谢谢。
发布于 2020-03-15 02:38:06
从sortByColumn方法中删除col参数,因为它实际上不是一个参数,并以这种方式更改该方法:
// Function to sort by column
public static void sortbyColumn(int arr[][]) {
// Using built-in sort function Arrays.sort
Arrays.sort(arr, new Comparator<int[]>() {
@Override
// Compare values according to columns
public int compare(final int[] entry1, final int[] entry2) {
if (entry1[1] < entry2[1])
return 1;
else if (entry1[1] > entry2[1])
return -1;
return -1 * Integer.valueOf(entry2[2])
.compareTo(Integer.valueOf(entry1[2]));
}
}); // End of function call sort().
}当然,将main调用更改为sortbyColumn(matrix);
解释:
只有在第二列相等的情况下,我们才需要由第三列进行比较(这意味着第一次比较数值的结果等于0)。在这种情况下,我们用倒序进行比较,用-1将比较结果相乘即可得到。
结果:
8 5 134
7 5 171
4 5 293
3 4 191
9 3 354
0 2 432
2 2 456
5 2 475
6 2 491
1 1 282 发布于 2020-03-15 02:34:43
试着这样做:
int matrix[][] = {
{0, 2, 432}, {1, 1, 282}, {2, 2, 456}, {3, 4, 191}, {4, 5, 293},
{5, 2, 475}, {6, 2, 491}, {7, 5, 171}, {8, 5, 134}, {9, 3, 354}};
Comparator<int[]> secondDecrease = (a, b) -> b[1] - a[1];
Comparator<int[]> thirdIncrease = (a, b) -> a[2] - b[2];
Arrays.stream(matrix)
.sorted(secondDecrease.thenComparing(thirdIncrease))
.forEach(s -> System.out.println(Arrays.toString(s)));https://stackoverflow.com/questions/60689084
复制相似问题