3

文字列値のリストがあります。次のように、コンパレータを使用して特定の順序で並べ替えます

public static final List<String> CUSTOM_LIST = Arrays.asList("Red", "Green", "Blue");
comparator = new Comparator<String>(){
             @Override
             public int compare(final String o1, final String o2){
                   return Integer.valueOf(CUSTOM_LIST.indexOf(o1))
                   .compareTo(Integer.valueOf(CUSTOM_LIST.indexOf(o2)));
              }
         };

だから比較するために私はそうします

Collections.sort(listToSort,comparator);

または逆ソートの場合

Collections.sort(listToSort,Collections.reverseOrder(comparator));

今、私のリストには空の値があり、常に最後に入れたいと思っています。どうすればそれを達成できますか?

4

1 に答える 1

7

compare インターフェイスは、両方のオブジェクトの違いを示す数値を返します。は常に空の値を最後に配置する必要があるため、返される整数値が他のどの値よりも大きい (または小さい) ことを確認して、すべての空の値が の隅に引っ張られるようにする必要があることに注意してCollectionください。

 comparator = new Comparator<String>(){
                @Override
                public int compare(final String o1, final String o2){
                    if(o1.isEmpty()) return Integer.MAX_VALUE;
                    else if (o2.isEmpty()) return Integer.MIN_VALUE;

                    else return Integer.valueOf(ModuleConstants.CUSTOM_LIST.indexOf(o1))
                                        .compareTo(
                           Integer.valueOf(ModuleConstants.CUSTOM_LIST.indexOf(o2)));
                }
            };
于 2013-03-13T15:20:05.000 に答える