如何按字符串编号对列表视图进行排序?

时间:2016-04-27 12:37:19

标签: android sorting listview

这是我的主要问题,经过一些研究,我没有找到解决方案,所以......我想对我的自定义对象列表进行排序。这些项目有价格,但由于某种原因,它们是字符串而不是int。我想知道如何实现这一目标,感谢您的帮助!

小人物问题,排序列表视图和回收者视图是否以同样的方式完成?

编辑:

public class Product implements Parcelable {
    private String imgUrl, titre, description, prix, nomAgence, pays, ville, type_produit, nbPieces = null;
    List<String> urlImageList_thumb = new ArrayList<>();
    List<String> urlImageList_full = new ArrayList<>();
    private int isAdded = 0;

/* getters and setters*/
}

编辑2:在您的帮助之后,这里是我的可比代码

@Override
public int compareTo(Product otherProduct) {
    String tmp = prix.replace(" €", "");
    String tmp2 = otherProduct.prix.replace(" €", "");

    //Integer p1 = Integer.valueOf(tmp);  --> does not work
    //Integer p2 = Integer.valueOf(tmp2); --> does not work

    Integer p1 = Integer.parseInt(tmp); //same error
    Integer p2 = Integer.parseInt(tmp2); // same error

    return p1.compareTo(p2);
}

以下是活动中的代码:

 bouton_tri.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Collections.sort(productList);
        }
    });

编辑3:

@Override
public int compareTo(Product otherProduct) {
    String tmp = prix.replace(" €", "").replaceAll(" ", "");
    String tmp2 = otherProduct.prix.replace(" €", "").replaceAll(" ", "");
    Integer p1 = Integer.valueOf(tmp);
    Integer p2 = Integer.valueOf(tmp2);
    return p1.compareTo(p2);
}

我仍然有一个错误,但当我刚刚起飞&#34; €&#34;价值是&#34; 5 300 000&#34;,如果只是空格&#34; 5300000€&#34;。但把两者放在一起给了我这个错误java.lang.NumberFormatException:无效的int:&#34; - &#34; ... 有任何想法吗 ?感谢

4 个答案:

答案 0 :(得分:2)

您可以修改Product课程以实施可比较

在将String转换为Integer之前,您需要删除和所有空格。

public class Product implements Parcelable, Comparable<Product> {
    private String prix;

    //...

    @Override
    public int compareTo(Product otherProduct) {
        String tmp = prix.replace(" €", "").replaceAll(" ", "");
        String tmp2 = otherProduct.prix.replace(" €", "").replaceAll(" ", "");
        Integer p1 = Integer.valueOf(tmp);
        Integer p2 = Integer.valueOf(tmp2);
        return p1.compareTo(p2);
    }
}

完成对您的集合进行排序后,您可以使用:Collections.sort(...);此方法将把您在适配器中使用的自定义对象列表作为参数。

例如:

List<Product> l = new ArrayList();
Collections.sort(l);
  

请注意,对集合进行排序不会刷新recyclerview的视图。

您必须在适配器上调用notifyDataSetChanged()来刷新recyclerview:

您可以在宣布适配器的主要活动中执行此操作:

yourAdapter.notifyDataSetChanged();

答案 1 :(得分:1)

假设你有List<String> sampleData对象

Collections.sort(sampleData, new Comparator<String>() {
        @Override
        public int compare(String c1, String c2) {
            return Integer.valueOf(c1) -  Integer.valueOf(c2);
        }
    });

这将对您的数据进行排序。

答案 2 :(得分:1)

(int) Integer.parseInt(p2.getNumberOfRecords()) - Integer.parseInt(p1.getNumberOfRecords())

因此,String数据类型中的整数的简单比较不会正确结果,而是先解析字符串:

int value = Integer.parseInt(string)

答案 3 :(得分:0)

试试这个:

Collections.sort (list, new Comparator<String> () {

    @Override
    public int compare (String s1, String s2) {

        return s1.compareToIgnoreCase(s2);
    }
});

OR


Collections.sort (list, new Comparator<String> () {

    @Override
    public int compare (String s1, String s2) {

        //cast string price to integer
        int price1 = Integer.parseInt(s1);
        int price2 = Integer.parseInt(s2);
        if (price1 > price1) {

            return 1;
        }
        else if (price2 > price1) {

            return -1;
        }
        else {

            return 0;
        }
    }
});