Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:使用迭代器从列表中删除元素 private void removeletters fromMakeWords(列表a、列表b){ 迭代器i=a.迭代器(); 用于(字符串s:b) while(i.hasNext()){ 对象o=i.next(); 如果(o.toString()等于){ i、 删除(); 打破 } } }_Java_Android_List_Iterator - Fatal编程技术网

Java Android:使用迭代器从列表中删除元素 private void removeletters fromMakeWords(列表a、列表b){ 迭代器i=a.迭代器(); 用于(字符串s:b) while(i.hasNext()){ 对象o=i.next(); 如果(o.toString()等于){ i、 删除(); 打破 } } }

Java Android:使用迭代器从列表中删除元素 private void removeletters fromMakeWords(列表a、列表b){ 迭代器i=a.迭代器(); 用于(字符串s:b) while(i.hasNext()){ 对象o=i.next(); 如果(o.toString()等于){ i、 删除(); 打破 } } },java,android,list,iterator,Java,Android,List,Iterator,我使用迭代器循环遍历列表,如果存在匹配项,则从列表中删除一个元素。 例如:如果a=[a,y,f,z,b]和b=[a,f]-->输出将是a=[y,z,b] 问题是如果a=[a,y,f,z,b]和b=[f,a]-->输出将是a=[a,y,z,b] 迭代器不会在开始时删除[a]值。是否有一种方法可以重置迭代器,以便每次我break迭代器都从头开始?或者有更好的方法解决这个问题吗?您不能“重置”迭代器,但只要想从头开始迭代,就可以得到一个新的迭代器。像这样: private void remo

我使用迭代器循环遍历列表,如果存在匹配项,则从列表中删除一个元素。 例如:如果
a
=
[a,y,f,z,b]
b
=
[a,f]
-->输出将是
a
=[
y,z,b
]

问题是如果
a
=
[a,y,f,z,b]
b
=
[f,a]
-->输出将是
a
=[
a,y,z,b
] 迭代器不会在开始时删除[
a
]值。是否有一种方法可以重置迭代器,以便每次我
break
迭代器都从头开始?或者有更好的方法解决这个问题吗?

您不能“重置”迭代器,但只要想从头开始迭代,就可以得到一个新的迭代器。像这样:

     private void removeLettersFromMakeWords(List<String> a, List<String> b){
     Iterator<String> i = a.iterator();

     for(String s:b)
         while (i.hasNext()) {
            Object o = i.next();

            if(o.toString().equals(s)){
                i.remove();
                break;
            }
         }
    }

编辑:正如@njzk2在他的评论中所说的,有更好的(内置)方法来实现这一点。

问题是,您永远不会重置迭代器。您可以简单地为b的每个字符串创建一个新的迭代器。但是,我建议只使用
a.removeAll(b)
而不是所有这些代码。谢谢,这非常简单,这太棒了!还有,你的搬迁费是多少simpler@user2456977的确但是,由于主题是“使用迭代器从列表中删除元素”…)
if (o.toString().equals(s)) {
     i.remove();
     i = a.iterator();
     break;
}