Java:动态排序arraylist

时间:2013-01-22 09:40:25

标签: java dynamic arraylist

我有几个项目的arraylist。一个项目可能有一个特定的int字段LYING等于OFF,FLOOR,RB1,RB2,RB3或RB4。

例如OFF定义为:

public static final int OFF = 0;

关于某些特定的全局变量,我想以自定义方式对这些元素进行排序,例如:

  • arraylist开头的所有RB1项目,任何RB3项目之后的所有RB2项目(无论OFF项目)和arraylist末尾的所有RB4项目。

对我来说哪个是最好的解决方案?

专注于写一些自定义:

public int compare(Object o1, Object o2) {
    if(globalVariable0 > 0) {
        if(o1.getLying() == o2.getLying)
            return 0;
        if(o1.getLying() == RB1 && o2.getLying != RB1)
            return -1;
        ...
    }else{
        ...
    }

或..?

2 个答案:

答案 0 :(得分:2)

可能有几个解决方案,但因为我们正在谈论一个非常自然的"命令我保持一个具有正确顺序的对象,例如我可以在比较方法中查询sortposition的地图,然后可以在属性文件中轻松编辑排序顺序。也许是这样的:

public int compare(Object o1, Object o1){
  ActualType a1 = (ActualType) o1;
  ActualType a2 = (ActualType) o2;
  SortedOrderMap map = getSortOrderMap(); //cached of course
  Integer l1 = map.get(a1.getLying());
  Integer l2 = map.get(a2.getLying());
  return l1.compareTo(l2);
}

答案 1 :(得分:0)

根据你的问题,我知道你希望通过他们的LYING对元素进行分组。

然后我会保留几个列表,每个LYING一个......你也可以为不同的LYING一个枚举。

您可以将元素存储在Multimap中,或者使用,例如:

static enum Lying {
    OFF, FLOOR, RB1, RB2, RB3, RB4
}

EnumMap<Lying , List<MyElements>> myElements = ...