我有一个包含元素的ArrayList(字段是名称和类型)。我希望只有两种不同的可能类型(“edu”和“ent”),每个类型都显示在自己的 ListView 中。
我的想法是创建两个具有相同数据的新 ArrayList,然后循环遍历每个数组并过滤不需要的元素,如下所示:
ListView listView_ent = (ListView) findViewById(R.id.popular_apps_list_ent);
ArrayList<DataHolder> data_ent = data;
for (int i = 0; i < data_ent.size(); i++) {
if(data_ent.get(i).getType().equals("edu")){
data_ent.remove(i);
}
}
listView_ent.setAdapter(new AppsAdapter(this, data_ent));
ListView listView_edu = (ListView) findViewById(R.id.popular_apps_list_edu);
ArrayList<DataHolder> data_edu = data;
for (int i = 0; i < data_edu.size(); i++) {
if(data_edu.get(i).getType().equals("ent")){
data_edu.remove(i);
}
}
listView_edu.setAdapter(new AppsAdapter(this, data_edu));
ArrayList中有10个元素,每种类型5个。
问题是,在两个 ListView 的最后,有 4 个相同的项目以混合类型显示。
知道我做错了什么吗?
最佳答案
1)复制数据
2) 不要使用 i 进行迭代并删除;使用迭代器(删除方法: http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#remove() )或从列表末尾开始
像这样:
ListView listView_ent = (ListView) findViewById(R.id.popular_apps_list_ent);
ArrayList<DataHolder> data_ent = new ArrayList( data);
for (int i = data_ent.size()-1; i >= 0; i--) {
if(data_ent.get(i).getType().equals("edu")){
data_ent.remove(i);
}
}
listView_ent.setAdapter(new AppsAdapter(this, data_ent));
ListView listView_edu = (ListView) findViewById(R.id.popular_apps_list_edu);
ArrayList<DataHolder> data_edu = = new ArrayList( data);
for (int i = data_edu.size()-1; i >= 0 ; i--) {
if(data_edu.get(i).getType().equals("ent")){
data_edu.remove(i);
}
}
listView_edu.setAdapter(new AppsAdapter(this, data_edu));
关于java - 过滤ArrayList并删除不需要的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247751/