4

いくつかの条件付きでのみ順序付け方向を変更するにはどうすればよいか疑問に思いました。私の場合、「BB」で始まる文字列は逆方向に並べる必要があり、それ以外はすべて通常どおりに並べる必要があります。

私のテストクラス:

public class StringTest {


    public static void main(String[] args) {
        SomeClass someClass1= new SomeClass("AA");
        SomeClass someClass2= new SomeClass("AB");
        SomeClass someClass3= new SomeClass("CB4");
        SomeClass someClass4= new SomeClass("BB7");
        SomeClass someClass5= new SomeClass("BB9");
        SomeClass someClass6= new SomeClass("BB3");
        SomeClass someClass7= new SomeClass("CB3");

        List<SomeClass> list = new ArrayList<SomeClass>();
        list.add(someClass1);
        list.add(someClass2);
        list.add(someClass3);
        list.add(someClass4);
        list.add(someClass5);
        list.add(someClass6);
        list.add(someClass7);

        Collections.sort(list);

        for (SomeClass someClass : list) {
            System.out.println(someClass.getSomeField());
        }
    }

}

私のコンパレータ:

public class SomeClass implements Comparable<SomeClass>
{
  private String someField;

  public int compareTo(final SomeClass o)
  {
    int res = 0;

    if (someField.startsWith("BB"))
    {
      res = o.someField.compareTo(someField);
    }
    else
    {
      res = someField.compareTo(o.someField);
    }
    return res;
  }

}

私の希望する出力:
AA
AB
BB9
BB7
BB3
CB3
CB4

これまでの実績:
AA AB
CB3
BB9
BB7
BB3
CB4

ジョニー

4

2 に答える 2

6

両方の要素が「BB」で始まる場合にのみ、 Comparator が異なる並べ替えを適用することを確認する必要があります。現在、「BB9」と「CB3」を比較しても、Comparator は異なる並べ替えを適用するため、後者は BB9 の前に並べ替えられています。

public class SomeClass implements Comparable<SomeClass>
{
   private String someField;

   public int compareTo(final SomeClass o)
   {
     int res = 0;

     if (someField.startsWith("BB") && o.someField.startsWith("BB"))
     {
       res = o.someField.compareTo(someField);
     }
     else
     {
       res = someField.compareTo(o.someField);
     }
     return res;
   }
}
于 2012-08-21T12:24:01.667 に答える
1
if(someField.startsWith("BB") && o.someField.startsWith("BB")))

compareTo問題を解決する可能性があるメソッドでこの変更を試してください。

于 2012-08-21T12:26:45.403 に答える