繁体   English   中英

在Java中按升序对整数对列表进行排序?

[英]sorting a list of pair of integers in ascending order in java?

我正在使用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<>());类型参数Collections.sort(dist, new ListComparator<>());
原因:不能对非通用ListComparator使用' <> '

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

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

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

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

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

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

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

您可以通过使ListComparator通用化来解决此问题, ListComparator ,处理List的元素:

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

但是,您似乎想要一个非通用的 ListComparator ,它固定用于比较Pair<Integer, Integer>元素。 在这种情况下,请删除菱形运算符:

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

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

由于编译器预计在读@OverridecompareTo方法写在签名匹配Comparator

public int compareTo(Object o1, Object o2)

并不是

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

您可以通过明确告诉Comparator使用什么而不是使用raw-types来解决此问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM