首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collections.sort不适用于List<Point2D.Double>

Collections.sort不适用于List<Point2D.Double>
EN

Stack Overflow用户
提问于 2015-03-13 10:50:49
回答 2查看 1.7K关注 0票数 0

我在我的绘图器中使用List<Point2D.Double> serie来存储点坐标。当我想进行排序时,我决定使用Collections.sort(serie),但这表明存在这样的错误

不可能有双重类型

那么,如何根据List<Point2D.Double>坐标对x进行排序呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-13 11:06:03

文档 of Collections.sort(List<T>)可以看到

列表中的所有元素必须实现可比较的接口。

这是由

代码语言:javascript
复制
public static <T extends Comparable<? super T>> void sort(List<T> list)

因此,应该声明list来存储扩展/实现Comparable的类型元素,但是Point2D.Double没有实现Comparable,因此它不是有效类型。

对于这种情况,Java添加

代码语言:javascript
复制
public static <T> void sort(List<T> list, Comparator<? super T> c)

方法,该方法允许您创建自己的比较器,以便比较不实现可比较的元素,或者以与预定义不同的方式进行比较。

所以你的代码看起来就像

代码语言:javascript
复制
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编写它,比如

代码语言:javascript
复制
Collections.sort(serie, Comparator.comparingDouble(Point2D.Double::getX));

甚至是

代码语言:javascript
复制
serie.sort(Comparator.comparingDouble(Point2D.Double::getX));
票数 6
EN

Stack Overflow用户

发布于 2015-03-13 11:00:24

Point2D不实现Comparable接口。您将需要创建一个执行所需操作的自定义Comparator,并将其与列表一起传递给sort方法,例如.

代码语言:javascript
复制
Collections.sort(serie, new Comparator<Point2D.Double>() {
    public int compare(Point2D.Double p1, Point2D.Double p2) {
        return (int)(p1.getX() - p2.getX());
    }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29030348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档