Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:动态排序arraylist_Java_Dynamic_Arraylist - Fatal编程技术网

Java:动态排序arraylist

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

我有几个项目的列表。项目可能有一个特定的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>> 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中