1

私の質問は、カスタム オブジェクトを使用して ArrayList をそれらのプロパティの 1 つによって並べ替える方法ですが、カスタム条件から開始する方法についてです。

もっと詳しく説明しましょう。ここに私のコードがあります:

public static void sortArrayListByProperty(ArrayList colorList){

        Collections.sort(colorList, new Comparator(){

            public int compare(Object emp1, Object emp2){

                int intValue1 = ((ColorCounter)emp1).getIntColorValue();        
                int intValue2 = ((ColorCounter)emp2).getIntColorValue();

                if(intValue1 < intValue2)
                    return 1;
                else if(intValue1 > intValue2)
                    return -1;
                else
                    return 0;    
            }
        });
    }

これにより、ArrayList が大きいものから小さいものへと並べ替えられます。

しかし、私が望むのは、指定する開始番号から ArrayList をソートすることです。

たとえば、ArrayList に含まれている場合

5 3 9 1 14 

数字を3から始めたいとしましょう。

3 5 9 14 1

十分に明確であることを願っています...

出来ますか?

@ヨアヒム・ザウアー

ありがとう、私はあなたのコードを少し編集し、戻り値を変更しましたが、うまくいきました!

編集されたコード:

if (cv1 >= threshold && cv2 < threshold) {
   return -1;
} else if (cv2 >= threshold && cv2 < threshold) {
   return -1;
} else if (cv1 < cv2) {
   return 1;
} else if (cv1 > cv2) {
   return 1;
} else {
   return 0;    
}

テスト例:

16777215
16448250
15790320
4013373

15790320 で並べ替え:

15790320
16448250
16777215
4013373
4

3 に答える 3

3

これを試すことができます:

public class ColorCounterComparator implements Comparator<ColorCounter> {
  private final threshold;

  public ColorCounterComparator(final int threshold) {
    this.threshold = threshold;
  }

  @Override
  public int compare (ColorCounter c1, ColorCounter c2) {
    int cv1 = c1.getIntColorValue();
    int cv2 = c1.getIntColorValue();

    if (cv1 >= threshold && cv2 < threshold) {
       return -1;
    } else if (cv2 >= threshold && cv2 < threshold) {
       return 1;
    } else if (cv1 < cv2) {
       return -1;
    } else if (cv1 > cv2) {
       return 1;
    } else {
       return 0;    
    }
  }
}

これは明らかに非常にテストされておらず、1 つずつずれているエラーがいくつかある可能性があり、-1/1 値が反転している可能性があります。しかし、それはあなたに基本的な考え方を示すはずです;-)

于 2012-04-30T13:14:17.090 に答える
1

ArrayList サブリスト メソッドを使用してサブリストを作成し、このサブリストを並べ替えます。

于 2012-04-30T13:15:10.093 に答える
0

テストされていませんが、アイデアはわかります:2つの状況があります

  • 両方の数値が開始番号 (例では 3) を下回っている、または両方が上にある ==> それらを比較する
  • 1 つの数字は開始番号の下にあり、もう 1 つは上にある ==> カスタム ソート順では、最初の数字は 2 番目の数字の後にあります。

if (intValue1 < start && intValue2 < start || intValue1 >= start && intValue2 >= start) {
    if(intValue1 < intValue2)
        return 1;
    else if(intValue1 > intValue2)
        return -1;
    else
        return 0;    
} else {
    if (intValue1 < start)
        return -1;
    else
        return 1;
}
于 2012-04-30T13:13:36.167 に答える