簡體   English   中英

使用集合對列表進行排序會導致錯誤

[英]sorting a list using Collections causes errors

我有一個MatOfDMAtch類型的對象,我轉換為一個列表,我想使用Collections對其進行排序,如下所示,但是當我運行代碼時,我收到以下錯誤。

請讓我知道為什么我會收到這些錯誤以及如何解決。

代碼

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??
    }
};

DMatch類必須實現Comparable接口,或者必須使用可以比較DMatch對象的適當Comparator調用Collections.sort(...)。

您必須實現這樣的自定義比較getYourValueToCompare()通過getter更改getYourValueToCompare() ):

Collections.sort(dMatchList, new Comparator<DMatch>() {
    public int compare(DMatch a1, DMatch a2) {
        return a1.getYourValueToCompare().compareTo(a2.getYourValueToCompare());
    }
});

注意:請記住為DMatch類實現equals方法DMatch將看不到任何排序!

org.opencv.features2d.DMatch不實現接口java.lang.Comparable 因此,默認情況下無法比較。 您必須編寫自己的Comparator

並調用java.util.Collections.sort(list, new MyDMatchComparator());

public class MyDMatchComparator implements Comparator<DMatch>{

    @Override
    public int compare(DMatcho1, DMatch o2) {
       //compare logic
    }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM