如果有唯一的值,我可以根据另一个数组对数组进行排序。但由于我正在尝试对以下给定数组排序:
initial fuel[]={1,9,9,2,9,9};
initial cost[]={2,6,5,4,3,1};
我想对燃料阵列进行排序,然后又想对燃料阵列的成本阵列进行排序。
我希望输出如下:
final fuel[]={1,2,9,9,9,9};
final cost[]={2,4,6,5,3,1};
下面是我的代码:
public static void sort(List<Integer> c, List<Integer> f) {
List<Integer> cc = new ArrayList<>(c);
Collections.sort(c);
List<Integer> al = new ArrayList<>();
int i = 0;
while (i < c.size()) {
int temp = c.get(i);
int index = cc.indexOf(temp);
al.add(f.get(index));
cc.remove(index);
f.remove(index);
i++;
}
for (int value : c)
System.out.print(value + " ");
System.out.println();
for (int value : al)
System.out.print(value + " ");
}
如何使用比较器以这种方式进行排序?同样的,如何使用流api?
3条答案
按热度按时间2sbarzqh1#
如果您总是想将给定的燃料值与成本相关联,那么我建议您创建一个类来容纳它们。这将允许正确排序,同时保持两个值在一起。
这将创建类并基于fuel值对其进行排序,并将其放入列表中。
印刷品
您可以将各个值复制回列表,如下所示:
如果您想保持副本的默认顺序,那么这将起作用,因为java中的排序是稳定的(在比较equals值时保持插入顺序)。其工作原理是根据燃料阵列的值对索引进行排序,然后使用排序后的索引以正确排序的顺序构建成本列表。
印刷品
fuelinfo类
ukqbszuj2#
使用以下选项:
输出:
希望这就是你要找的!
5sxhfpxr3#
假设这两个数组的长度相同,可以创建一个包含这些数组中的元素对的Map项列表,然后先按键再按值对该列表进行排序,也可以仅按键对其进行排序,然后按插入顺序对值进行排序:
另请参见:基于多个字段收集ID列表