我在RMI工作,我有不同的服务器(类),我想在arraylist中存储来自这些类的对象,然后我想通过返回一些整数的共享方法对它们进行排序。
答案 0 :(得分: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)
is only since 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);
}
答案 1 :(得分:0)
使用Comparator解决此问题。
答案 2 :(得分: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);
}
});