1

いくつかのアイテムの配列リストがあります。項目には、OFF、FLOOR、RB1、RB2、RB3、または RB4 に等しい特定の int フィールド LYING がある場合があります。

たとえば、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ごとに1つずつ、いくつかのリストを保持します...異なるLYINGの列挙型にすることもできます。

要素をMultimapに格納するか、次のように使用できます。

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

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