我想根据另一个数组(索引)的排序顺序迭代两个数组(A,B),在本例中为 10, 34, 32, 21。
String[] A: a, b, c, d
String[] B: e, f, g, h
int[] indexes: 10, 34, 32, 21
为这里的坏例子道歉。我已经更新了索引数组以消除混乱。
预期输入和输出
输入是三个数组。我想使用索引数组的排序来迭代 A、B。即我想找到一种使用顺序 (a, d, c, b) 迭代 A 并使用顺序 (e, h, g, f) 迭代 B 的方法
我的做法:
我用一种我认为与另一种方法相同的解决方案解决了这个问题。然而,第二种方法does not工作。如果有人能解释为什么它不起作用,我将不胜感激,因为我认为这会让我更好地理解 Collections.sort 在 java 中的工作原理。
List<Integer> indexOrder = new ArrayList<>(indexes.length);
for (int i = 0; i < indexes.length; i++) {
indexOrder.add(i);
}
Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[s]));
灵感来自这个线程 https://stackoverflow.com/questions/4859261/get-the-indices-of-an-array-after-sorting,我创建了一个值为 (1, 2, 3...indexes.length) 的 ArrayList(更喜欢 AList 而不是数组),然后使用带有 ref 的比较器对其进行排序。到索引。上面的代码按预期工作。
但是,如果我改变索引[s]在最后一行的末尾索引[indexOrder.indexOf(s)]。排序会给出错误的结果。如果 ArrayList 的索引与其值相同,为什么 indexOf(s) 给出的结果与 s 不同。
Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[indexOrder.indexOf(s)]));