如何使用Blackberry API对包含对象的Vector进行排序

时间:2012-10-11 07:07:53

标签: sorting blackberry java-me vector

我想对包含以下字段的对象

的矢量进行排序
public class CategoryListing   {

     String company_id;
     String company_name;
     double distance;

     //setters and getters here 
}

我填充了webservice中的向量,现在我想按距离对该向量进行排序,这意味着我想显示最近的向量。如何对包含对象的向量进行排序?

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分: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对矢量进行排序。注意由于Arrays存在于1.2中它也存在于黑莓中。

public static void sort(Vector vector,Comparator 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);
    }
}