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

例如,OFF定义为:

public static final int OFF = 0;


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


阵列列表开头的所有RB1项,任何RB3项之后的所有RB2项(无论OFF(关闭)项)以及阵列列表末尾的所有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{
        ...
    }


要么..?

最佳答案

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

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

10-06 16:19