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)只是从 Java 7 开始。如果您使用的是旧版本,请改用此实现:

   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

使用Comparator解决此问题。

于 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());
      }
     });

如果返回int,则使用Integer.compare方法(Java7),如下所示:

    //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 回答