我在我的绘图器中使用List<Point2D.Double> serie来存储点坐标。当我想进行排序时,我决定使用Collections.sort(serie),但这表明存在这样的错误
不可能有双重类型
那么,如何根据List<Point2D.Double>坐标对x进行排序呢?
发布于 2015-03-13 11:06:03
从文档 of Collections.sort(List<T>)可以看到
列表中的所有元素必须实现可比较的接口。
这是由
public static <T extends Comparable<? super T>> void sort(List<T> list)因此,应该声明list来存储扩展/实现Comparable的类型元素,但是Point2D.Double没有实现Comparable,因此它不是有效类型。
对于这种情况,Java添加
public static <T> void sort(List<T> list, Comparator<? super T> c)方法,该方法允许您创建自己的比较器,以便比较不实现可比较的元素,或者以与预定义不同的方式进行比较。
所以你的代码看起来就像
Collections.sort(serie, new Comparator<Point2D.Double>() {
public int compare(Point2D.Double p1, Point2D.Double p2) {
return Double.compare(p1.getX(), p2.getX());
}
});或者您可以用Java 8编写它,比如
Collections.sort(serie, Comparator.comparingDouble(Point2D.Double::getX));甚至是
serie.sort(Comparator.comparingDouble(Point2D.Double::getX));发布于 2015-03-13 11:00:24
Point2D不实现Comparable接口。您将需要创建一个执行所需操作的自定义Comparator,并将其与列表一起传递给sort方法,例如.
Collections.sort(serie, new Comparator<Point2D.Double>() {
public int compare(Point2D.Double p1, Point2D.Double p2) {
return (int)(p1.getX() - p2.getX());
}
});https://stackoverflow.com/questions/29030348
复制相似问题