2014-11-04 2 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 = [a, y, f, z, b]ab가 = [f, a] 경우 [y, z, b]Android : 목록에서 요소를 반복자로 제거

문제는 -> 출력 될 것이다 = a, y, z, b] a 이터레이터는 처음에 [a] 값을 제거하지 않습니다. iterator를 초기화 할 수있는 방법이 있나요? break 반복자가 처음부터 시작될 때마다? 아니면이 문제를 해결할 더 좋은 방법이 있습니까?

+2

이터레이터를 재설정하지 않는 것이 문제입니다. 간단히 b의 각 문자열에 대해 새로운 반복자를 만들 수 있습니다. 그러나 모든 코드 대신'a.removeAll (b)'를 사용하는 것이 좋습니다. – njzk2

+0

덕분에 훨씬 편리합니다 – user2456977

답변

1

반복기를 "재설정"할 수는 없지만 처음부터 다시 반복 할 때마다 새 반복자를 얻을 수 있습니다.

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

편집 :이처럼 @ njzk2 그의 주석에서 말한대로,이 일을 위해 더 나은 (내장) 방법이 있습니다.

+0

이것은 아주 좋습니다! 그리고 나중에 removeAll은 훨씬 간단합니다 – user2456977

+0

@ user2456977 사실. 그러나 주제가 "반복자를 사용하여 목록에서 요소를 제거하고 있기 때문에 ... ... :) – matiash

+0

하하, 그렇기 때문에 나는 당신의 대답을 받아 들였습니다. :) – user2456977