多个列表的排序方法(需要调整)

我有一种排序方法,可以根据第一个输入的列表对多个列表进行排序。

private static <T extends Comparable<T>> void multiSort(
            final List<T> key,List<?>... lists) {

    List<Integer> indices = new ArrayList<>();
    for (int i = 0; i < key.size(); i++) {
        indices.add(i);
    }

    Collections.sort(indices,(i,j) -> key.get(i).compareTo(key.get(j)));

    Map<Integer,Integer> swapMap = new HashMap<>(indices.size());
    List<Integer> swapFrom = new ArrayList<>(indices.size()),swapTo = new ArrayList<>(indices.size());
    for (int i = 0; i < key.size(); i++) {
        int k = indices.get(i);
        while (i != k && swapMap.containsKey(k)) {
            k = swapMap.get(k);
        }

        swapFrom.add(i);
        swapTo.add(k);
        swapMap.put(i,k);
    }

    for (List<?> list : lists)
        for (int i = 0; i < list.size(); i++)
            Collections.swap(list,swapFrom.get(i),swapTo.get(i));
}

示例: 在使用multiSort之前

列表_1:7、3、8、2、20、13、15、2、10、2

列表_2:400、216、307、50、61、111、209、77、15、36

...

使用多排序后

multiSort(List_1,List_1,List_2);

列表_1: 2 2 2 ,3、7、8、10、13、15、20

列表_2: 50 77 36 ,216、400、307、15、111、209、61

...

问题

我想要做的是,如果第一个列表包含相同的值(2、2、2 ...),则对List_2的排序方式与第一个列表相同。 预期结果:

列表_1: 2 2 2 ,3、7、8、10、13、15、20

列表_2: 36 50 70 ,216、400、307、15、111、209、61

bbcwch123 回答:多个列表的排序方法(需要调整)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2745001.html

大家都在问