我有一个简单的listview(recyclerView),其中每个list-item都有一个复选框.应使用以下代码删除所有选中的项目:
for(int i = 0; i<shopListItems.size(); i++) {
if(shopListItems.get(i).isBought == 1) {
shopListItems.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它没有.如果选中了10个项目,则只会删除其中的7个项目,我必须再次运行该代码以删除其余项目.
代码似乎很好,但我真的不明白为什么它不会删除所有已检查的或所有的(isBought == 1)
.
Guy*_*Guy 18
remove(index)不仅会删除对象,还会移动所有剩余的对象以缩小间隙.您需要从列表末尾迭代到开始
for(int i = shopListItems.size() - 1 ; i >= 0 ; i--) {
if(shopListItems.get(i).isBought == 1){
shopListItems.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
除了上面提到的方法,您还可以按升序执行:
for(int i = 0; i < list.size(); i++){
if(list.get(i).isBought == 1){
list.remove(i--);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Java 8,还有另一种简单的替代方法:
list = list.stream()
.filter(item -> item.isBought == 1)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
参考:http://zeroturnaround.com/rebellabs/java-8-explained-applying-lambdas-to-java-collections/
归档时间: |
|
查看次数: |
1075 次 |
最近记录: |