如何制作通用比较器方法

时间:2015-04-05 13:48:57

标签: java list arraylist comparator

我有一个实用程序类,我希望有一个泛型方法进行排序,以便传递给下面发布的这个静态方法的任何类型的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);
    }
};

3 个答案:

答案 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。