2012-05-02 4 views
1

목록에서 요소를 필터링한다고 가정 해보십시오. 이 코드를 실행하면 목록으로 동시성 예외 같은 루프 중에 수정되는 트리거 :목록에서 요소 필터링하기

List<String> aList = new ArrayList<String>(); 

// Add instances to list here ... 

for(String s : aList){ 
    if("apple".equals(s)){ // Criteria 
     aList.remove(s); 
    } 
} 

이 당신이 어떤 다른 방법으로 알고을하는 기존의 방법은 무엇입니까?

+3

중복 가능성 (http://stackoverflow.com/questions/1196586/calling-remove-in- foreach-loop-in-java) – assylias

답변

3

가장 좋은 방법은 (에서 removeAll이에 대한 돌봐) 당신은 단순히 수동으로 모든 반복없이 솔루션을 사용할 수는, Iterator.remove() 귀하의 경우를 들어

+1

@assylias는 자세한 정보가있는 위의 링크를 게시했습니다. –

1

을 사용하는 것입니다

aList.removeAll("apple"); 

그것은 제거 목록에서 모든 "사과"요소.

1

반복하는 중이거나 간단한 요소가있는 경우 위의 두 가지에 동의하십시오. 조건이나 오브젝트가 더 복잡하면 Apache Commons CollectionUtils의 필터 메소드를 고려하십시오.이 메소드를 사용하면 조건을 캡슐화하는 조건부를 정의 할 수 있으며 컬렉션의 각 요소에 적용됩니다. 컬렉션 aList와 술어 applePredicate가 주어지면 호출 방법은 다음과 같습니다.

org.apache.commons.collections.CollectionUtils.filter (aList, applePredicate);

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html#filter(java.util.Collection, org.apache.commons.collections.Predicate) 자바 foreach 루프에서 호출 제거]의