2014-11-04 66 views
0
 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; 
      } 
     } 
    } 

我使用迭代器遍历列表并从列表中删除元素,如果匹配。 例如:如果a = [a, y, f, z, b]b = [a, f] - >的输出将是a = [y, z, b]Android:使用迭代器从列表中删除元素

问题是,如果a = [a, y, f, z, b]b = [f, a] - >的输出将是a = [a, y, z, b] 并且迭代器在开始时不会删除[a]值。有没有办法重置迭代器,以便每次我迭代器从一开始就开始?break?还是有更好的方法来解决这个问题?

+2

问题是你永远不会重置迭代器。你可以简单地为b的每个字符串创建一个新的迭代器。但是,我建议只使用'a.removeAll(b)'而不是所有的代码。 – njzk2 2014-11-04 17:02:45

+0

感谢,更容易 – user2456977 2014-11-04 17:27:43

回答

1

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

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

编辑:如@ njzk2在他的评论中说,有这样做的更好(内置)的方法。

+0

这太棒了!和雅卸除所有更简单 – user2456977 2014-11-04 17:27:26

+0

@ user2456977的确。然而,因为该主题是“从迭代器清单中删除元素”... :) – matiash 2014-11-04 23:20:56

+0

哈是真的,这就是为什么我接受你的答案:) – user2456977 2014-11-05 00:11:06

相关问题