어제 오늘 내일

[Java] List에서 null 삭제하기 본문

IT/Java

[Java] List에서 null 삭제하기

hi.anna 2021. 5. 5. 17:45

Java List 객체에서 null을 삭제하는 방법입니다.

 

  1. List.remove()
  2. List.removeAll()
  3. Iterator

 

 

1. List.remove()

boolean remove​(Object o)

List의 remove(Object o) 메소드는

파라미터로 삭제할 element를 입력받고,

List에서 첫번 째로 찾은 해당 element를 삭제하고,

true를 리턴합니다.

 

  코드  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RemoveNullInList {
    public static void main(String[] args) {
        
        // List Data 준비
        List<String> list = new ArrayList(Arrays.asList("Hi", null, "Hello", null));

        System.out.println("null 삭제 전 : " + list); // null 삭제 전 : [Hi, null, Hello, null]

        // null 삭제
        while (list.remove(null)) {
        }

        System.out.println("null 삭제 후 : " + list); // null 삭제 후 : [Hi, Hello]
    }
}

  결과  

null 삭제 전 : [Hi, null, Hello, null]
null 삭제 후 : [Hi, Hello]

위 코드는 remove() 메소드를 이용하여

List의 모든 null을 삭제하는 코드입니다.

 

while(remove(null)) {}

remove(Object o)는

리스트에서 파라미터로 전달받은 Object o(여기서는 null) 중, 첫번째로 나타나는 값을 삭제하고 true를 리턴합니다.

remove() 메소드가 첫번째로 나타나는 값만을 삭제하기 때문에, 

모든 null을 삭제하기 위해서 while 반복문을 사용하였습니다.

list.remove(null)은, list에서 null을 찾아 삭제하고, true를 리턴합니다.

만약, 더 이상 삭제할 null이 list에 남아있지 않으면 false를 리턴하게 되고,

이 때 while문도 종료됩니다.

 

 

 

2. List.removeAll()

boolean removeAll(Collection<?> c)

List의 removeAll() 메소드는

파라미터로 전달된 Collection 객체가 가지고 있는 값이 list에 있으면

이 값들을 모두 list에서 제거합니다.

 

  코드  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class RemoveNullInList {
    public static void main(String[] args) {
        
        // List Data 준비
        List<String> list = new ArrayList(Arrays.asList("Hi", null, "Hello", null));

        System.out.println("null 삭제 전 : " + list); // null 삭제 전 : [Hi, null, Hello, null]

        // null 삭제
        list.removeAll(Collections.singletonList(null));

        System.out.println("null 삭제 후 : " + list); // null 삭제 후 : [Hi, Hello]
    }
}

  결과  

null 삭제 전 : [Hi, null, Hello, null]
null 삭제 후 : [Hi, Hello]

removeAll() 메소드는,

파라미터로 전달된 Collection 객체가 가지고 있는 값을 모두 삭제하기 때문에,

remove() 메소드와 달리 반복문을 따로 작성해주지 않아도 됩니다.

 

list.removeAll(Collections.singletonList(null));

removeAll() 메소드에 null 값을 가지는 Collection 객체를 전달하였습니다.

Collections.singletonList() 메소드는, 하나의 원소만을 가지는, immutable한 List 객체를 리턴합니다.

따라서, 위코드는 아래와 같이 작성해 주어도 똑같이 동작합니다.

List nullList = new ArrayList();
nullList.add(null);

list.removeAll(nullList);

 

 

 

3. Iterator

  코드  

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class RemoveNullInList {
    public static void main(String[] args) {
        
        // List Data 준비
        List<String> list = new ArrayList(Arrays.asList("Hi", null, "Hello", null));

        System.out.println("null 삭제 전 : " + list); // null 삭제 전 : [Hi, null, Hello, null]

        // null 삭제
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            if (it.next() == null) {
                it.remove();
            }
        }

        System.out.println("null 삭제 후 : " + list); // null 삭제 후 : [Hi, Hello]
    }
}

  결과  

null 삭제 전 : [Hi, null, Hello, null]
null 삭제 후 : [Hi, Hello]

Iterator를 사용하여

List를 순회하면서 null을 삭제하는 방법입니다.

 

 

 

반응형
Comments