java - 过滤ArrayList并删除不需要的元素

标签 java android

我有一个包含元素的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/

相关文章:

java - 来自 SQLite 结果的 Android 自定义 ArrayAdapter

java - 如何通过 Android 发送 Flash(通知)短信?

android - 将应用程序添加为外部库时不允许显示 list 属性(android)

android - 在android中的 ListView 中创建动态 TextView

java - jackson 键/值对的序列化?

java - 合规性验证(正则表达式)

墙内的Java迷宫并获得所有可能的路径

java - 部署到不同机器时如何使用selenium/standalone-chrome?

java - Google App Engine 错误 503 - 服务不可用

android - 如何在 ViewPager 中使用多 Pane 布局