我有一个由{3} ListView
填充的ArrayList
:
items
,ratings
和comments
但是,我需要通过忽略前导'the'来对项目进行排序。我已经通过使用items
重新排列ArrayList
Collections.sort
来完成此操作(请参阅下面的代码),但这是问题:评论和评分不会重新排列,因此它会出现故障在ListView
。
例如,如果列表是:
items
排序后我得到了:
所以items
按照我的意愿排队,但关联的comments
和ratings
没有排序。我不确定如何实现这一点以及将它放在何处。我想在ArrayAdapter中?
以下是我更改items
列表的代码:
Comparator<String> ignoreLeadingThe = new Comparator<String>() {
public int compare(String a, String b) {
a = a.replaceAll("(?i)^the\\s+", "");
b = b.replaceAll("(?i)^the\\s+", "");
return a.compareToIgnoreCase(b);
}
};
Collections.sort(items, ignoreLeadingThe);
这是问题吗?我可以在何处以及如何根据项目列表的位置对评级和评论列表进行排序?
修改:
这是我的ArrayAdapter
中的getView代码:
ItemObject io = getItem(position);
String name = io.name;
String total = io.total;
String rating = io.ratings;
String comment = io.comments;
holder.t1.setText(name);
holder.t2.setText(total);
holder.t3.setText(comment);
holder.t4.setText(rating);
注意:在上面的示例中,我没有提及第4个ArrayList
total
。
答案 0 :(得分:2)
你应该看一下创建一个类来将你的项目包装在ArrayList中,如下所示:
class MyItem {
String item;
int ratings;
int comments;
}
然后改为使用这些对象的ArrayList:
List<MyItem> myList = new ArrayList<MyItem>();
然后在你的比较器中,就像你正在做的那样,但是针对MyItem.item
而不仅仅是a
和b
进行测试。像这样:
Comparator<MyItem> ignoreLeadingThe = new Comparator<MyItem>() {
public int compare(MyItem a, MyItem b) {
a.item = a.item.replaceAll("(?i(^the\\s+", "");
b.item = b.item.replaceAll("(?i(^the\\s+", "");
return a.item.compareToIgnoreCase(b.item);
}
};
Collections.sort(myList, ignoreLeadingThe);