2016-12-16 2 views
-1

배열 목록에서 모든 비어있는 항목을 제거해야합니다. 이전에 remove 메소드를 호출했기 때문에 모두 끝에 있습니다. 결과적으로 빈 노드를 찾기 위해 for 루프를 사용할 때 혼란 스럽다면 단일 셀을 미안하다고 생각하는지 모르겠다. 크기가 낮아 졌기 때문에 for(int k = 0; k < arraylist.size(); k++)과 같은 것을 말할 수 없다. 하지만 빈 노드를 제거해야합니다. 어떻게해야합니까? 감사합니다배열 목록에서 빈 항목 제거

for(int k = 0; k < terms.size(); k++) 
{ 
    if((terms.get(k)).length() < 1) // terms is the name of array list and there are null entries at the end of it 
     terms.remove(k); 
} 
+0

문제를 해결하는 것이 명확하지 않습니다. 코드와 오류 로그를 게시 할 수 있습니까?! –

+0

오류는 없지만 코드를 게시합니다 – Andrew

+0

'ArrayList'의 유형은 무엇입니까? – msagala25

답변

0

때마다 remove는 ArrayList의 크기가 축소,라고, 그래서 파괴 루프가 작동하지 않습니다. 마지막에있는 모든 빈 항목의 가정이 보장된다면, 대신 빈 내부 항목의 첫 번째 인덱스를 검색 한 다음 찾은 인덱스에 subList을 호출 할 수 있습니다.

int k; 
for(k = 0; k < terms.size(); k++) 
{ 
    if((terms.get(k)).length() < 1) break; 
} 
return terms.subList(0, k) 
+0

어리석은 copy/paste 실수, 편집 됨 –

3

할 수있는 방법이 많이 있습니다. 여기에 단지

는 특정 인덱스에서 요소를 제거 인덱스

당신의 반복에 대한 문제를, 조정 몇 가지 예입니다, 요소는 위로 이동합니다 다음. 그래서

, 당신은

for (Iterator<String> itr = terms.iterator(); itr.hasNext();) { 
    if (itr.next().isEmpty()) { 
     itr.remove(); 
    } 
} 

가 필터링을 수행 할, 새로운 배열 목록을 구성 할 수 있도록

IIRC ArrayList의 반복자는, remove() 지원

for(int k = 0; k < terms.size(); k++) { 
    if((terms.get(k)).isEmpty()) { // use isEmpty() plesae 
     terms.remove(k--); // move k back 1 element, so it points to 
          // correct index after increment of for loop 
    } 
} 

사용 반복자.

당신이 정말로 필요하지 않은 경우가 가장 쉽게 할 수있는 장소 당신이 다음, 제거 할 것을 정확히을 알고 있다면 제거

(자바 (8)를 사용하는 가정)

terms = terms.stream().filter(s -> ! s.isEmpty()) 
       .collect(Collectors.toList()); 

// or create another list for result, then 
// terms.clear(); terms.addAll(tempList); 
// if you need to change content of terms instead 
0

당신에게는 두 가지 옵션이 있습니다.

당신도 당신이 사용하지 않을 목록을 오버 헤드를 추가하는 단점이있다을 제어 더미 컬렉션의 모든 요소를 ​​제거하는 List#removeAll을 사용할 수 있습니다

...

stringList.removeAll(Arrays.asList((String)null)); 

... 나 자바의 Stream API를 사용하고 null 개의 요소를 모두 Objects.nonNull으로 필터링 할 수 있습니다.

stringList = stringList.stream().filter(Objects::nonNull) 
           .collect(Collectors.toList()); 

어느 관리 컬렉션의 길이에 대한 이러한 옵션의

.