在Java中,你如何根据另一个列表对一个列表进行排序?
我已经看到了其他几个类似的问题,但我真的找不到任何可以解决我的问题的东西。
我的用例是这样的:用户最初有一个项目列表(listA)。他们对项目重新排序并希望保留该顺序(listB),但是,由于限制,我无法在后端保留该顺序,因此我必须在检索列表A后对其进行排序。
所以基本上,我有2个ArrayList(listA和listB)。一个具有列表应处于的特定顺序(列表B),另一个具有项目列表(列表A)。我想根据列表B对列表A进行排序。
我已经看到了其他几个类似的问题,但我真的找不到任何可以解决我的问题的东西。
我的用例是这样的:用户最初有一个项目列表(listA)。他们对项目重新排序并希望保留该顺序(listB),但是,由于限制,我无法在后端保留该顺序,因此我必须在检索列表A后对其进行排序。
所以基本上,我有2个ArrayList(listA和listB)。一个具有列表应处于的特定顺序(列表B),另一个具有项目列表(列表A)。我想根据列表B对列表A进行排序。
使用 Java 8:
Collections.sort(listToSort,
Comparator.comparing(item -> listWithOrder.indexOf(item)));
或更好:
listToSort.sort(Comparator.comparingInt(listWithOrder::indexOf));
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()