Java:动态排序arraylist
我有几个项目的列表。项目可能有一个特定的int字段,该字段等于OFF、FLOOR、RB1、RB2、RB3或RB4 例如,“关闭”定义为:Java:动态排序arraylist,java,dynamic,arraylist,Java,Dynamic,Arraylist,我有几个项目的列表。项目可能有一个特定的int字段,该字段等于OFF、FLOOR、RB1、RB2、RB3或RB4 例如,“关闭”定义为: public static final int OFF = 0; 关于某些特定的全局变量,我希望以自定义方式对这些元素进行排序,例如: static enum Lying { OFF, FLOOR, RB1, RB2, RB3, RB4 } EnumMap<Lying , List<MyElements>> myElemen
public static final int OFF = 0;
关于某些特定的全局变量,我希望以自定义方式对这些元素进行排序,例如:
static enum Lying {
OFF, FLOOR, RB1, RB2, RB3, RB4
}
EnumMap<Lying , List<MyElements>> myElements = ...
- arraylist开始处的所有RB1项、任何RB3项之后的所有RB2项(不考虑关闭项)以及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{
...
}
或者..?对此可能有几种解决方案,但由于我们讨论的是“非自然”顺序,因此我会保留具有正确顺序的对象,例如我可以在比较方法中查询sortposition的映射,那么sortorder可能很容易在属性文件中编辑。也许是这样的:
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);
}
从你的问题中,我了解到你想通过撒谎来对元素进行分组 然后我会保留几个列表,每个列表对应一个谎言。。。您还可以为不同的碱液创建枚举 您可以将元素存储在中,或使用,例如:
static enum Lying {
OFF, FLOOR, RB1, RB2, RB3, RB4
}
EnumMap<Lying , List<MyElements>> myElements = ...
静态枚举{
关,楼层,RB1,RB2,RB3,RB4
}
枚举映射myElements=。。。
是否关闭、楼层、RB1/2/3/4枚举?在这种情况下,你就不能:public int compareTo(Object other){返回this.getlieng().value()-other.getlieng().value();}
@ChristiaandeJong Updated:)有趣,如果我需要基于多个因素排序,那不仅是谎言,而且还有其他参数呢?@这取决于数据的基数。在您的示例中,似乎没有太多的排序位置,那么构建一个查找表将对您有所帮助。如果有无限个(或至少是不实际的数目)排序位置,您需要用另一种方式处理,可能需要两个查找表?:-)我想分组,但我也想将它们保留在主Arraylist中