Android ArrayList按模板排序

时间:2014-09-07 07:28:44

标签: android sorting arraylist

我有一个X元素的arraylist。我想最终处于这样的情况:如果存在某个元素,那么它将在列表中占用一定的优先级。例如,如果元素1出现在arraylist中,那么它将处于位置0.但是,如果元素1如果不存在,则元素2应位于位置0.并非所有元素都将出现在应用程序的任何单个运行中。

当然,这些元素不会被称为1,2,3 ......但它们是复杂的字符串名称 - 没有普通的排序可行。订购清单的最佳方式是什么?有没有办法使用"理想排序列表的模板"?

为了让事情更清楚,我们假设我的理想" sort(如果存在所有可能的先前元素)是:

狗 猫 兔

但要分类的arraylist是:

马 兔子 猫 猪

发出我想要从此特定应用程序获取的订单:

猫 兔子 马 猪

没有优先权的元素应该以任何顺序发生。

2 个答案:

答案 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);
 }