1

次のフィールドのオブジェクトを含むベクターをソートしたい

public class CategoryListing   {

     String company_id;
     String company_name;
     double distance;

     //setters and getters here 
}

私は webservice からベクトルを入力しました。今、そのベクトルを距離で並べ替えたいと思います。つまり、最も近いものを表示したいということです。オブジェクトを含むベクトルをソートするにはどうすればよいですか?

4

2 に答える 2

4

Blackberry では Generics がサポートされていないため、他の回答はどれも役に立ちません。Blackberry は古いバージョンの Java を使用しています。次のコードを試してください。SimpleSortingVectorを使用します

    SimpleSortingVector sortVector = new SimpleSortingVector();
    sortVector.setSortComparator(new Comparator() {

        public int compare(Object o1, Object o2) {

            CategoryListing o1C = (CategoryListing)o1;
            CategoryListing o2C = (CategoryListing)o2;
            return Double.toString((o1C.distance)).compareTo(Double.toString(o2C.distance));
        }
    });
            //when you add elements to this vector, it is automatically sorted by distance
    sortVector.addElement(new CategoryListing());
于 2012-10-11T07:50:36.230 に答える
2

Comparatorを使用できます。

以下のように距離でソートするコンパレータを定義します

public class DistanceComparator implements Comparator {
    public int compare(Object o1, Object o2) {
        return Double.valueOf(((CategoryListing) o1).distance)
                .compareTo(((CategoryListing) o2).distance);// use getters
    }
}

を使用してベクトルを並べ替えbelow sort methodます。注意配列は 1.2 から存在するため、blackberry にも存在します。

public static void sort(Vector vector,Comparator コンパレータ) {

    Object[] array = new Object[vector.size()];   
    vector.copyInto(array);   

    Arrays.sort(array,comparator);

    int i = 0;
    Enumeration enumumeration = vector.elements();
    while (enumumeration.hasMoreElements()) {
        enumumeration.nextElement();
        vector.insertElementAt(array[i++], i);
    }
}
于 2012-10-11T07:12:04.493 に答える