这是我的主要问题,经过一些研究,我没有找到解决方案,所以......我想对我的自定义对象列表进行排序。这些项目有价格,但由于某种原因,它们是字符串而不是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; ... 有任何想法吗 ?感谢
答案 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;
}
}
});