基于另一数组排序的java排序
我有一个字符串数组列表totalVals
。totalVals
中的每个条目都是一个字符串name
和一个双loc
,在插入数组列表之前,它被连接成一个字符串,如:
totalVals.add(name + "," + loc);
这就是我获得数据的方式。我已将值分为字符串和双数组,如下所示:
String[] temp;
String[] names = new String[totalVals.size()];
double[] locs = new double[totalVals.size()];
for (int i = 0; i < totalVals.size(); I++){
temp = totalVals.get(i).splot(",");
names[i] = temp[0];
locs[i] = Double.parseDouble(temp[1]);
}
但是,现在我想对数据进行排序,并在返回之前将其放回数组列表中。我希望locs
数据按降序排列,这可以通过使用Arrays.sort(locs, Collections.reverseOrder());
来实现。但是我不知道如何对names
进行排序,以便这些名称仍然与它们最初所在的位置相关联
totalVals的示例:{"Bahamas,32.2233","Zimbabwe,82.2443","India,56.2355","Australia,24.4363"}
将分为:
names = {"Bahamas","Zimbabwe","India","Australia"};
locs = {32.2233,82.2443,56.2355,24.4363};
然后将其分类为:
names = {"Zimbabwe","India","Bahamas","Australia"};
locs = {82.2443,56.2355,32.2233,24.4363};
那么,我将如何对这两个数组进行排序,以使两个数组中索引i
处的关联保持不变
# 1 楼答案
提供的方法TheWildHealer肯定比这个更干净,但是这里有一个不需要自定义类的解决方案。对数组进行流式处理并将其映射到
[String, Integer]
的数组/对中。基于第二个值/整数进行排序,然后重构为字符串# 2 楼答案
与其将arraylist拆分为两个不同的数组并分别对它们进行排序,不如根据双值降序对
ArrayList
进行排序,然后将arraylist拆分为两个数组将列表拆分为双[]数组和字符串[]数组
在java 8版本之前
使用`集合。使用自定义比较器排序(),然后将列表拆分为两个不同的数组
# 3 楼答案
野生治疗师的解决方案简短而优雅。下面是针对旧java平台的类似解决方案,以及用于测试的main()方法:
结果:
# 4 楼答案
不要将数组变成两个数组,而是将它变成一个
ArrayList<Pair>
Pair
类如下所示:并按如下方式对阵列进行排序:
然后将数组拆分为两个数组