我有一个实用程序类,我希望有一个泛型方法进行排序,以便传递给下面发布的这个静态方法的任何类型的arrayList, 将被分类。
当我写下面的代码时,eclipse要求添加未实现的方法,当我接受添加它们时,我发现它们太多而且我 我不知道应该使用哪一个
CODE :
public static <T> void sortAsc(ArrayList<T> list) {
Collections.sort(list, ascOrder);
}
private static Comparator<T> ascOrder = new Comparator<T>() {
public int compare(DMatch arg0, DMatch arg1) {
// TODO Auto-generated method stub
return Float.compare(arg0.distance, arg1.distance);
}
};
答案 0 :(得分:1)
要执行您要执行的操作,您需要一种确保将有getDistance()
方法的类型。这可以是抽象类或接口。无论是哪种我称之为HasDistance。
public static void sortAsc(ArrayList<? extends HasDistance> list) {
Collections.sort(list, ascOrder);
}
private static Comparator<HasDistance> ascOrder = new Comparator<>() {
public int compare(HasDistance arg0, HasDistance arg1) {
return Float.compare(arg0.getDistance(), arg1.getDistance());
}
};
答案 1 :(得分:0)
如果你想排序&#34;任何类型&#34;然后你需要选择一些适用于&#34;任何类型&#34;的东西。实际上,您希望对Object
列表进行排序。这可能会限制您比较myObject.hashCode()
或myObject.toString()
。选择一个或另一个并坚持使用它。从这些方法中获得的顺序是否有用是一个完全不同的问题。
如果您可以使列表中的内容不那么通用,那么您将有更多选项可供选择。
答案 2 :(得分:0)
在Java 8之后,你可以使用yourList.sort(param)。 方法param可以是Comparator,如果列表中的项实现Comparable接口,则为null。