在Java中,你如何根据另一个列表对一个列表进行排序?

2022-08-31 12:34:17

我已经看到了其他几个类似的问题,但我真的找不到任何可以解决我的问题的东西。

我的用例是这样的:用户最初有一个项目列表(listA)。他们对项目重新排序并希望保留该顺序(listB),但是,由于限制,我无法在后端保留该顺序,因此我必须在检索列表A后对其进行排序。

所以基本上,我有2个ArrayList(listA和listB)。一个具有列表应处于的特定顺序(列表B),另一个具有项目列表(列表A)。我想根据列表B对列表A进行排序。


答案 1

使用 Java 8:

Collections.sort(listToSort, 
    Comparator.comparing(item -> listWithOrder.indexOf(item)));

或更好:

listToSort.sort(Comparator.comparingInt(listWithOrder::indexOf));

答案 2
Collections.sort(listB, new Comparator<Item>() {
    public int compare(Item left, Item right) {
        return Integer.compare(listA.indexOf(left), listA.indexOf(right));
    }
});

但是,这是非常低效的,您可能应该创建一个 from listA 来更快地查找项目的位置。Map<Item, Integer>

Guava有一个现成的比较器:Ordering.explicit()


推荐