2

私はRMIで作業していて、異なるサーバー(クラス)を持っています。これらのクラスのオブジェクトをarraylistに格納し、次に、整数を返す共有メソッドでオブジェクトを並べ替えます。

4

3 に答える 3

2

Fooこれらのオブジェクトが実装されていないComparable<Foo>がメソッドを持っているタイプであると仮定すると、次のように独自のオブジェクトpublic int getBar()を渡すことができます。Comparator<Foo>Collections#sort()

List<Foo> foos = /* whatever */;
Collections.sort(foos, new Comparator<Foo> () {
   @Override
   public int compare(Foo a, Foo b) {
       return Integer.compare(a.getBar(), b.getBar());
   } 
});

Integer#compare(int, int)これはJava7以降のみであることに注意してください。古いものを使用している場合は、代わりに次の実装を使用してください。

   public int compare(Foo a, Foo b) {
       int x = a.getBar();
       int y = b.getBar();

       return (x < y) ? -1 : ((x == y) ? 0 : 1);
   } 

これはまさにInteger#compare()内部でどのように機能するかです。

于 2012-12-08T16:45:38.467 に答える
0

この問題にはコンパレータを使用してください。

于 2012-12-08T16:43:19.507 に答える
0

次に、共有メソッドが次のように並べ替えを行うと仮定しpublic Integer sharedMethod()ます。

    List<SharedClass> list = new ArraList<SharedClass>();
    ....

    //Sorting here
    Collections.sort(list, new Comparator<SharedClass>(){
      @Override
      public int compare(SharedClass sc1, SharedClasssc2){
          return sc1.sharedMethod().compareTo(sc1.sharedMethod());
      }
     });

返される場合は、以下のようにメソッド(Java7int )を使用します。Integer.compare

    //Sorting here
    Collections.sort(list, new Comparator<SharedClass>(){
      @Override
      public int compare(SharedClass sc1, SharedClasssc2){
          return Integer.compare(sc1.sharedMethod(), sc1.sharedMethod());
      }
     });

7未満のJavaバージョンを使用している場合は、次のようになります。

    //Sorting here
    Collections.sort(list, new Comparator<SharedClass>(){
      @Override
      public int compare(SharedClass sc1, SharedClasssc2){
          int value1 = sc1.sharedMethod();
          int value2 = sc1.sharedMethod();
          //return 1, if value1 is greater,-1 if smaller and 0 if equal to value2. 
          return (value1  < value2) ? -1 : ((value1 > value2) ? 1 : 0);
      }
     });
于 2012-12-08T16:45:48.817 に答える