1

我有几个项目的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{
        ...
    }

或者..?

4

2 回答 2

2

可能有几种解决方案,但由于我们谈论的是“不自然”的顺序,我会以正确的顺序保存一个对象,例如我可以在比较方法中查询排序位置的地图,那么排序顺序可能很容易也许在属性文件中进行编辑。或许是这样的:

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);
}
于 2013-01-22T09:52:36.763 回答
0

根据您的问题,我了解到您希望通过 LYING 对元素进行分组。

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

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

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

EnumMap<Lying , List<MyElements>> myElements = ...
于 2013-01-22T10:00:01.200 回答