Java List 모든 Null 제거
1. 일반 Java를 사용하여 List에서 Null 제거
Java 컬렉션 프레임워크는 List의 모든 null 요소를 제거하기 위한 간단한 설루션인 기본 while 루프를 제공한다.
1
2
3
4
5
6
7
@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null);
while (list.remove(null));
assertThat(list, hasSize(1));
}
또는 다음과 같은 간단한 접근 방식을 사용할 수도 있다.
1
2
3
4
5
6
7
@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null);
list.removeAll(Collections.singleton(null));
assertThat(list, hasSize(1));
}
이 두 방법 모두 소스 목록을 수정합니다.
2. Google Guava를 사용하여 List에서 Null 제거
구아바를 사용하여 null을 제거할 수도 있고 술어를 통해 더욱 기능적인 접근 방식을 사용할 수도 있다.
1
2
3
4
5
6
7
@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null);
Iterables.removeIf(list, Predicates.isNull());
assertThat(list, hasSize(1));
}
또는 소스 목록을 수정하지 않으려면 Guava에서 새 필터 목록을 만들 수 있다.
1
2
3
4
5
6
7
8
@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV2_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null, 2, 3);
List<Integer> listWithoutNulls = Lists.newArrayList(
Iterables.filter(list, Predicates.notNull()));
assertThat(listWithoutNulls, hasSize(3));
}
3. Apache Commons 컬렉션을 사용하여 List에서 Null 제거
이제 유사한 기능 스타일을 사용하는 Apache Commons Collections 라이브러리를 사용하는 간단한 방법이다.
1
2
3
4
5
6
7
@Test
public void givenListContainsNulls_whenRemovingNullsWithCommonsCollections_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
CollectionUtils.filter(list, PredicateUtils.notNullPredicate());
assertThat(list, hasSize(3));
}
이 방법은 원래 목록도 수정한다.
4. Lambdas를 사용하여 List에서 Null 제거 (Java 8)
목록을 필터링하기 위해 Lambdas를 사용하는 Java 8 방법이다. 필터링 프로세스는 병렬 또는 직렬로 수행할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Test
public void givenListContainsNulls_whenFilteringParallel_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
List<Integer> listWithoutNulls = list.parallelStream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
@Test
public void givenListContainsNulls_whenFilteringSerial_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
List<Integer> listWithoutNulls = list.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
public void givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect() {
List<Integer> listWithoutNulls = Lists.newArrayList(null, 1, 2, null, 3, null);
listWithoutNulls.removeIf(Objects::isNull);
assertThat(listWithoutNulls, hasSize(3));
}
이것이 바로 목록에서 모든 null 요소를 제거하기 위한 빠르고 매우 유용한 방법이다.
[출처 및 참고]
This post is licensed under CC BY 4.0 by the author.