上不起作用我在繪圖器中使用List<Point2D.Double> serie
來存儲點座標。當我要排序,我決定用Collections.sort(serie)
但它表明,有喜歡Collections.sort在List <Point2D.Double>
一個錯誤不能有雙重類型
所以,我怎麼能排序List<Point2D.Double>
通過x
座標?
上不起作用我在繪圖器中使用List<Point2D.Double> serie
來存儲點座標。當我要排序,我決定用Collections.sort(serie)
但它表明,有喜歡Collections.sort在List <Point2D.Double>
一個錯誤不能有雙重類型
所以,我怎麼能排序List<Point2D.Double>
通過x
座標?
從Collections.sort(List<T>)
documentation你可以看到
列表中的所有元素都必須實現Comparable接口
這是由
01執行public static <T extends Comparable<? super T>> void sort(List<T> list)
所以名單應該宣佈爲存儲延伸/實現Comparable
但Point2D.Double
沒有實現Comparable
類型的元素,所以它不是有效的類型。
對於這種情況下的Java增加
public static <T> void sort(List<T> list, Comparator<? super T> c)
方法,它允許你創建你自己的比較,所以你可以比較不實現Comparable,或者他們比預定義不同的方式比較元素。
所以,你的代碼可以像
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));
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());
}
});
但是不是Point2D.Double是Double一個定義爲Point2D內部類的類。 Point2D是否需要內部的比較器/可比較的或Double類? – muasif80 2015-03-13 11:04:14
@ muasif80:'Point2D.Double'既是一個嵌套類又是'Point2D'的子類,所以哪個類沒有實現'Comparable'(都不要),因爲*點沒有自然訂單一般*。 – Holger 2015-03-13 11:22:10
嗯,你有一個Point2D.Double的實例,所以這確保只有Point2D.Double可以進行比較。你想比較Point2D的任何實例,你可以改變比較器的匹配要求(
我們展示了異常 – 2015-03-13 10:53:12
「,但它顯示了有一個錯誤「你需要更具體。 (1)讓其他有類似錯誤的人發現你的問題和可能的答案(2)讓那些知道這樣的錯誤意味着在需要創建代碼之前寫下答案的人將會重現你的問題。 – Pshemo 2015-03-13 10:53:25
你有編譯錯誤嗎?如果是這樣,你需要提供一個自定義的比較器,因爲'Point2D.Double'類沒有實現'Comparable'接口。 – kraskevich 2015-03-13 10:54:17