2014-11-04 61 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

相關問題