簡體   English   中英

使用比較器對對象列表進行排序

[英]Using Comparator to sort the List of Objects

我正在嘗試做的是

使用比較器根據距離對對象列表進行排序


private Point getNearestPixelValue(int pixlX, int pixlY) {

        LinkedList<DistancePoint> mList=new LinkedList<DistancePoint>();

        for (int i = 0; i < modelModFile.getStroke_paths().size(); i++) {
            for (int j = 0; j < modelModFile.getStroke_paths().get(i).getMain_stroke().size(); j++) {

                if (j < modelModFile.getStroke_paths().get(i).getMain_stroke().size() - 1) {
                    String a = modelModFile.getStroke_paths().get(i).getMain_stroke().get(j).getStroke();
                    String[] fA = a.split(",");
                    Point p1 = new Point(Integer.valueOf(fA[0]), Integer.valueOf(fA[1]));
                    Point p2 = new Point(pixlX, pixlY);
                    //Add the calculated distance to a integerArray
                    DistancePoint mObj=new DistancePoint(p2,calDistBtwTwoPixels(p1, p2));
                    mList.add(mObj);
                }
            }
        }

        //Sort the array
        Arrays.sort(mList, DistancePoint.distanceComparator);

        //Return the nearest point
        return mList.get(0).getmPoint();
    }

DistancePoint.java

public class DistancePoint implements Comparable<DistancePoint>{

    int mDistance;
    Point mPoint;

    public DistancePoint(Point mPoint, int mDistance) {
        super();
        this.mPoint = mPoint;
        this.mDistance = mDistance;
    }


    public int getmDistance() {
        return mDistance;
    }

    public void setmDistance(int mDistance) {
        this.mDistance = mDistance;
    }

    public Point getmPoint() {
        return mPoint;
    }

    public void setmPoint(Point mPoint) {
        this.mPoint = mPoint;
    }


    public static Comparator<DistancePoint> distanceComparator = new Comparator<DistancePoint>() {

        @Override
        public int compare(DistancePoint e1, DistancePoint e2) {
            return (int) (e1.getmDistance() - e2.getmDistance());
        }
    };


    @Override
    public int compareTo(DistancePoint distancePoint) {
        //let's sort the employee based on distance in ascending order.
        return (this.mDistance - distancePoint.mDistance);
    }
}

我得到的錯誤:

在此處輸入圖片說明

如何解決此問題,無法理解該錯誤。 我是否正確使用比較器

您正在嘗試對List<T>進行排序; 您應該使用的是:

Collections.sort(theList, theComparator);

Arrays.sort()需要一個T[]陣列T ),這是不太同樣的事情-在很多方面。

暫無
暫無

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

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