我正在使用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


我不知道我在做什么错,因为我举个例子,我看做这件事完全一样,所以我真的不知道我做错了什么。请帮忙!谢谢

最佳答案

您的代码有两个问题。首先您致电:

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 ...
}

关于java - 在Java中按升序对整数对列表进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46864315/

10-11 20:53