我是java的新手(并且不太好解释,但我会尽我所能)并且在我的任务中我将根据数组1的排序对其他数组进行排序。 假如我们有三个2d数组,并根据Names数组对它进行a-z排序:
String[][]Names = { {"Bob", "James", "Mary", "Felix"}, {"Calvin", "Kurt", "Chris", "Ethan" } };
int[][]Age = { {19, 20, 30, 33} , {20, 31, 51, 43} };
Double[][]Hours_Worked = { {19.5, 20.4, 39.9, 25.2} , {5.5, 10.9, 15.2, 20.9} };
然后一旦它被排序,其他数组就像输出中的值一样遵循左右:
Bob : 19 : 19.5
Calvin : 20 : 5.5
Chris : 31 : 10.9
我该怎么做才能实现这个目标?
答案 0 :(得分:0)
我能想象的最简单,最易读的方法是首先解析数据并创建容器类,它们代表数据项{{1}之间的相关性}。之后以某种方式收集它,保留结构PersonData
。然后你可以根据自己喜欢的方式排序。如果您确实需要这些单独的数组,那么再次提取信息。
首先是容器类:
List<List<PersonData>>
现在解析和收集:
public class PersonData {
private String mName;
private int mAge;
private double mHoursWorked;
public PersonData(String name, int age, double hoursWorked) {
this.mName = name;
this.mAge = age;
this.mHoursWorked = hoursWorked
}
public String getName() {
return this.mName;
}
public int getAge() {
return this.mAge;
}
public double getHoursWorked() {
return this.mHoursWorked;
}
}
接下来是排序,假设组本身没有排序:
String[][] nameData = ...
int[][] ageData = ....
double[][] hoursWorkedData = ...
List<List<PersonData>> data = new ArrayList<>();
for (int outer = 0; outer < nameData.length; outer++) {
// Create a new group
List<PersonData> group = new ArrayList<>();
for (int inner = 0; inner < nameData[outer].length; inner++) {
// Process this person
String name = nameData[outer][inner];
int age = ageData[outer][inner];
double hoursWoked = hoursWorkedData[outer][inner];
group.add(new PersonData(name, age, hoursWorked);
}
// Add that group
data.add(group);
}
或者如果您让data.forEach(group -> {
Collections.sort(group, Comparator.comparing(PersonData::getName));
});
实施PersonData
它只是:
Comparable
之后再次提取信息并重新创建数组:
data.forEach(Collections::sort);
或者您直接使用新结构
String[][] sortedNameData = data.stream() // Stream<List<PersonData>>
.map(group -> group.stream() // sub Stream<PersonData>
.map(PersonData::getName) // sub Stream<String>
.toArray(String[]::new)) // Stream<String[]>
.toArray(String[][]::new) // String[][]
int[][] sortedAgeData = data.stream()
.map(group -> group.stream()
.map(PersonData::getAge)
.toArray(int[]::new))
.toArray(int[][]::new)
double[][] sortedHoursWorkedData = data.stream()
.map(group -> group.stream()
.map(PersonData::getHoursWorked)
.toArray(double[]::new))
.toArray(double[][]::new)
通过容器类将所有内容组合在一起。