我有几个项目的arraylist。一个项目可能有一个特定的int字段LYING等于OFF,FLOOR,RB1,RB2,RB3或RB4。
例如OFF定义为:
public static final int OFF = 0;
关于某些特定的全局变量,我想以自定义方式对这些元素进行排序,例如:
对我来说哪个是最好的解决方案?
专注于写一些自定义:
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{
...
}
或..?
答案 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 = ...