タイプ MatOfDMAtch のオブジェクトがあり、リストに変換し、コレクションを使用して以下に示すように並べ替えたいのですが、コードを実行すると以下のエラーが発生します。
これらのエラーが表示される理由と解決方法を教えてください。
コード:
List dMatchList = matDMatch.toList();
System.out.println("dMatchList.size(): " + dMatchList.size());
sortMAtches(0, 100, dMatchList);
}
private static void sortMAtches(double minDist, double maxDist, List list) {
// TODO Auto-generated method stub
java.util.Collections.sort(list);
/*for (int i = 0; i < list.size(); i++) {
System.out.println("lsit[" + i + "] = " + list.get(i));
}*/
}
エラー:
Exception in thread "main" java.lang.ClassCastException: org.opencv.features2d.DMatch cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Arrays$ArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at test.FeaturesMatch.sortMAtches(FeaturesMatch.java:96)
at test.FeaturesMatch.main(FeaturesMatch.java:91)
更新:
今はコンパレータ インターフェイスを使用しましたが、下のコードのコメント アウトされた行にあるように、.compareTo() メソッドを使用できません。それの使い方?
List<DMatch> dMatchList = matDMatch.toList();
DMatch[] dMatArray = matDMatch.toArray();
System.out.println("dMatchArray.length(): " + dMatArray.length);
System.out.println("dMatchList.size(): " + dMatchList.size());
java.util.Collections.sort(dMatchList, compa);
}
static Comparator<DMatch> compa = new Comparator<DMatch>() {
public int compare(DMatch arg0, DMatch arg1) {
// TODO Auto-generated method stub
return arg0.distance.???; //compareTo() does not exist??
}
};