일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- filternotnull()
- compose
- 오블완
- 백준
- list
- Java
- Kotlin
- nullpointerexception방지
- disposableeffect
- programmers
- Hilt
- 백준파이썬
- 자료형
- composelifecycle
- 자바리스트정렬
- 자바
- 파이썬
- 배열
- Python
- 리스트
- jetpack
- 자바set
- ContentProvider
- android
- 프로그래머스
- 파이썬문법
- Dependency
- 티스토리챌린지
- Provider
- 문자열
Archives
- Today
- Total
study gomi
[kotlin/코틀린] 리스트 등의 컬렉션에서 null 값을 제거하는 방법 - filterNotNull() 본문
728x90
반응형
filterNotNull()
- Kotlin의 컬렉션 확장 함수 중 하나로 간단하지만 아주 강력한 기능을 제공한다.
- 리스트 등 컬렉션에서 null 값을 제거해준다
- 개인적으로 아주 유용하게 잘 쓰고 있다.
1. 역할
- 정의: 리스트나 시퀀스에서 모든 null 값을 필터링하고 null이 아닌 요소들만 포함된 새 리스트를 반환한다.
- 사용 상황: 컬렉션에 null 값이 포함될 가능성이 있고 이 값을 제외하고 작업해야 할 때 사용된다.
- 예시
val listWithNulls: List<String?> = listOf("A", null, "B", null, "C")
val filteredList = listWithNulls.filterNotNull()
println(filteredList) // 출력: ["A", "B", "C"]
2. 작동 방식
fun <T : Any> Iterable<T?>.filterNotNull(): List<T> {
return this.filter { it != null }
}
- 내부적인 로직은 위와 같다 ↑
- T?는 null 값을 포함할 수 있는 제네릭 타입이고 T는 null 값을 포함하지 않는 타입이다.
- filterNotNull()은 컬렉션의 각 요소를 순회하며 it != null 조건에 맞는 요소만 필터링한다.
- 결과적으로 null 값이 제거된 안전한 리스트만 남는다.
3. 효과
- 코드의 안전성 개선
- NullPointerException 방지: null 값을 미리 제거하므로 이후 로직에서 null을 처리하지 않아도 된다
- 가독성 증가: filterNotNull()로 null 값 필터링을 한눈에 파악할 수 있다.
4. List 외의 사용 사례
(List 예시는 1번 설명에 예시로 들어가 있음)
- Map의 Value에서 null 제거
val mapWithNulls: Map<Int, String?> = mapOf(1 to "One", 2 to null, 3 to "Three")
val nonNullValues = mapWithNulls.values.filterNotNull()
println(nonNullValues) // 출력: ["One", "Three"]
- Sequence에서 사용
val sequenceWithNulls = sequenceOf("A", null, "B", null, "C")
val filteredSequence = sequenceWithNulls.filterNotNull().toList()
println(filteredSequence) // 출력: ["A", "B", "C"]
- Custom Objects 필터링
data class User(val id: Int, val name: String?)
val users = listOf(User(1, "Alice"), User(2, null), User(3, "Bob"))
val nonNullNameUsers = users.filter { it.name != null }
println(nonNullNameUsers) // 출력: [User(id=1, name=Alice), User(id=3, name=Bob)]
728x90
반응형
'basic > kotlin' 카테고리의 다른 글
[Kotlin/코틀린] Object (0) | 2024.10.23 |
---|---|
[Kotlin/코틀린] 숫자 문자열 검사 후 정수형으로 반환하기 (0) | 2024.10.18 |
[kotlin/코틀린] 리스트 자르기 - List의 일부 가져오기 (0) | 2024.10.18 |
Kotlin/코틀린 완전 기본, 기초 문법 모음 (입문) (1) | 2024.01.17 |