如果我有按优先级/顺序排序的项目的概念主列表:
1. dog
2. cat
3. fish
4. bunny
5. hamster
另一个列表带有值
["bunny", "dog", "fish"]
如何根据主列表对传入列表进行排序?所以,在这个例子中,我希望第二个列表导致
["dog", "fish", "bunny"]
经过分类后。
我可以手动编写一个函数来实现它,但我觉得Java已经有了某种内置和优化的方式来做这种事情。在Java中完成这种类型的列表排序的最佳方法是什么?
答案 0 :(得分:2)
masterList.get("bunny") = 4
等使用
编写自己的Comparator
int compare(String a, String b) {
return masterList.get(a) - masterList.get(b);
}
在最坏的情况下,任何解决方案都必须是O(最大列表中的项目数),因为您必须搜索整个大型列表才能找到要排序的列表中项目的位置。
答案 1 :(得分:2)
您可以做的是创建主副本并使用List#retainAll方法保留主服务器中的排序。
示例强>:
// Master list
List<String> master = new ArrayList<>(Arrays.asList("dog", "cat", "fish", "bunny", "hamster"));
// list to sort with respect to master
List<String> listToSort = new ArrayList<>(Arrays.asList("bunny", "dog", "fish"));
// copy of master
List<String> masterCopy = new ArrayList<>(master);
// keep only the items in masterCopy that are in the listToSort
masterCopy.retainAll(listToSort);
System.out.println(masterCopy);
<强>输出强>:
[dog, fish, bunny]