2013-08-28 6 views
1

arraylist에서 여러 항목을 제거하고 싶습니다.ArrayList에서 여러 항목 제거

String1-1, String5, String6, String1-2, String5, String6, String1-3, String5, String6 

나는 목록에서 String1-을 제거하려면 :

은 목록입니다. 그러나 모든 String1-이 같은 끝을 가지고있는 것은 아니므로 제거되지 않습니다. 따라서 list.remove("String1-")이 작동하지 않습니다.

질문 : 제거하려는 문자열의 끝이 같지 않을 때 arraylist에서 여러 항목을 제거하는 방법.

+0

나는 당신이 그것을보고 그것에 전달하려는 메시지를 생각하려고한다면 다른 대답을 제출했다. 나중에 많은 버그를 피할 수 있습니다. – allprog

답변

9

이 작업을 수행 할 단 하나의 방법이 없습니다,하지만 당신은 아주 쉽게 당신이 ArrayList 반복 경우를하고 ​​문자열이 "String1-" 시작 여부를 테스트하기 위해 String.startsWith 방법을 사용할 수 있습니다.

다음은 예입니다. 루프에서 for 루프를 사용하는 것보다 훨씬 쉽게 배열에서 항목을 제거하기 때문에 반복기를 사용했습니다.

Iterator<String> it = arrayList.iterator(); 
while (it.hasNext()) { 
    String value = it.next(); 
    if (value.startsWith("String1-")) { 
    it.remove(); 
    } 
} 
+0

정말 고마워요! 나는 그것을 작동하게했다! –

1

나중에 참조 할 수 있도록 Google 구아바가 있습니다.

질문의 문자열 목록을 만들 수있는 몇 가지 설정 코드 :

Iterable<String> filtered = Iterables.filter(stringsList, new Predicate<String>() { 
    @Override 
    public boolean apply(String input) { 
     return !input.startsWith("String1-"); 
    } 
}); 

이 간단한 루틴은 요소만을 포함하는 새 Iterable를 만듭니다 불필요한 항목을 필터링 지금

String stringsString = "String1-1, String5, String6, String1-2, String5, String6, String1-3, String5, String6"; 
String[] stringsArray = stringsString.split(", "); 
Iterable<String> stringsList = Arrays.asList(stringsArray); 

과 당신이 지정한 이것의 아름다움은 느리게 실행되고 (실제로 사용하고 싶을 때만 평가 됨) 원본 컬렉션을 수정하지 않는다는 것입니다. 대부분의 경우 소프트웨어 상태를 변경할 수 없도록 (변경 불가능)하는 것이 최선의 방법입니다. 변경 가능한 콜렉션을 처리하는 것은 어렵고 종종 소프트웨어 오류의 원인이됩니다.

+0

고마워, 이것도 시도해! –