在java中按升序排序整数对的列表?

时间:2017-10-21 14:30:13

标签: java sorting collections comparator

我正在使用javafx对类并尝试使用第二个值对它们进行排序。

  public static void main(String[] args)
   {
    List<Pair<Integer, Integer>> dist = new ArrayList<Pair<Integer, Integer>>();
    dist.add(new Pair <Integer,Integer> (4,54));
    dist.add(new Pair <Integer,Integer> (6,94));
    dist.add(new Pair <Integer,Integer> (7,4));
    dist.add(new Pair <Integer,Integer> (11,9));

    Collections.sort(dist, new ListComparator<>());

    System.out.println(dist);

     }

 public class ListComparator implements Comparator {

 @Override
public int compare(Pair<Integer, Integer> o1, Pair<Integer, Integer> o2) {
        return o1.getValue() - o2.getValue();

    }
  }

我一直收到以下错误和警告。

  

/tmp/java_izg9ZN/Main.java:34错误:无法推断类型参数   ListComparator Collections.sort(dist, new ListComparator<>());
   原因:不能将“<>”用于非泛型ListComparator

     

/tmp/java_izg9ZN/ListComparator.java:21错误ListComparator   抽象并且不会覆盖抽象方法compare(Object,Object)   在Comparator public class ListComparator implements Comparator {

中      

/tmp/java_izg9ZN/ListComparator.java:23错误:方法   覆盖或从超类型实现方法       @Override

我不知道我做错了什么,因为我看到这样做的例子完全相同,所以我真的不知道我做错了什么。请帮忙!感谢

1 个答案:

答案 0 :(得分:4)

您的代码有两个问题。首先你打电话:

Collections.sort(dist, new ListComparator<>());

因此,您告诉Java使用ListComparator自己推断类型(菱形运算符<>)。

但是,您的ListComparator课程不是通用的。它不期望任何类型的参数,例如String,你不写String<...>

您可以通过ListComparator泛型来处理此问题,例如List的元素:

public class ListComparator<E> implements Comparator<E> {
    // Compare E elements ...
}

但是,您似乎想要一个非泛型 ListComparator,它固定为比较Pair<Integer, Integer>元素。在这种情况下,删除钻石操作符:

Collections.sort(dist, new ListComparator());

第二个问题是你对Comparator使用原型,而不是告诉他将要比较的对象的类型。

因此,编译器在阅读@Override时期望您的compareTo方法与Comparator中写的签名相匹配:

public int compareTo(Object o1, Object o2)

而不是

public int compareTo(Pair<Integer, Integer> o1, Pair<Integer, Integer> o2)

您可以通过明确告知Comparator使用什么而不是使用原始类型来解决此问题:

public class ListComparator implements Comparator<Pair<Integer, Integer>> {
    // Compare Pair<Integer, Integer> elements ...
}