我有一个X元素的arraylist。我想最终处于这样的情况:如果存在某个元素,那么它将在列表中占用一定的优先级。例如,如果元素1出现在arraylist中,那么它将处于位置0.但是,如果元素1如果不存在,则元素2应位于位置0.并非所有元素都将出现在应用程序的任何单个运行中。
当然,这些元素不会被称为1,2,3 ......但它们是复杂的字符串名称 - 没有普通的排序可行。订购清单的最佳方式是什么?有没有办法使用"理想排序列表的模板"?
为了让事情更清楚,我们假设我的理想" sort(如果存在所有可能的先前元素)是:
狗 猫 兔
但要分类的arraylist是:
马 兔子 猫 猪
发出我想要从此特定应用程序获取的订单:
猫 兔子 马 猪
没有优先权的元素应该以任何顺序发生。
答案 0 :(得分:0)
您可以使用Collections.sort
进行自定义排序。您需要编写一个自定义Comparator
来比较两个元素并决定哪个元素更小(即哪个元素应该首先出现)。然后,您将列表和Comparator
传递给Collections.sort
,然后根据您指定的顺序进行排序。
this question中的更多细节。
答案 1 :(得分:0)
在主要课程中:
private final Map<String,Integer> precedenceMap= new HashMap<String,Integer>();
//CREATE A PRECEDENCE MAP SO WE CAN SET THE ORDER OF ICONS IN THE ACTIVITY
precedenceMap.put("Cat",0);
precedenceMap.put("Dog",1);
precedenceMap.put("Horse",2);
在我们完成设置所有动物之后(并且他们都使用下面的逻辑通过优先地图运行),对列表进行排序:
Collections.sort(AnimalList, new Comparator<Animal>() {
public int compare(Animal result1, Animal result2) {
return result1.getPrecedence()-result2.getPrecedence();
}
});
在Animal对象中:
private int precedence=99;
private Map<String,Integer> precedenceMap= new HashMap<String,Integer>();
并传入我们之前创建的优先级列表。如果动物对象的标签映射了优先级映射中的某些内容,则将对象的优先级设置为地图中的值:
if (precedenceMap.containsKey(label)) {
precedence=precedenceMap.get(label);
}