Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ChatGPT
- getChangePayload
- 유튜브
- 스피너
- build with ai
- doc2vec
- kotlin collection
- ktor api call
- ListAdapter
- kotlin list
- video caching
- list map
- ExoPlayer
- ktor client
- llm
- android exoplayer
- ansi2html
- android custom view
- android ktor
- DiffUtil.ItemCallback
- android
- exoplayer cache
- 독서
- FastAPI
- 안드로이드
- map
- Python
- 시행착오
- ListAdapter DiffUtil
- AWS EC2
Archives
- Today
- Total
버튼 수집상
[Kotlin] List.filter 파헤치기 본문
다양한 조건을 만족하는 요소들만 남긴 리스트 리턴하기.
물론 한 방에 여러가지 필터 조건을 적용시키기 보다 상황별로 함수를 분리하는 것도 방법이다.
예시1
코틀린 플레이그라운드 링크
import java.util.Calendar
import java.util.Date
enum class Job {
ACCOUNTANT,
SALESMAN,
MARKETER,
DEVELOPER;
}
data class SimpleObject(
val name : String,
val isPremium : Boolean = false,
val age: Int,
val job: Job
)
val simpleList = listOf(
SimpleObject("John", false, 11, Job.SALESMAN),
SimpleObject("Mark", true, 23, Job.DEVELOPER),
SimpleObject("Bob", false, 30, Job.MARKETER),
SimpleObject("Heize", true, 12, Job.ACCOUNTANT),
SimpleObject("Doug", true, 40, Job.ACCOUNTANT),
SimpleObject("Hyuk", true, 30, Job.DEVELOPER)
)
fun main() {
// isPremium 값이 true면서, 20세 이상이면서, 직업이 개발자인 사람들 filter
val filteredList = simpleList.filter { person ->
person.isPremium && person.age >= 20 && person.job == Job.DEVELOPER
}
// 이름만 출력
print(filteredList.joinToString{it.name})
}
예시2
// 푸시알림 필터링하기
fun filterPushList(pushType: PushType, data: ArrayList<PushItem>, isUnreadOnly: Boolean = false): List<PushItem> {
val filteredList = data.toMutableList()
// 한 달 사이 날짜 정보
val cal = Calendar.getInstance().apply {
time = Date()
add(Calendar.MONTH, -1)
}
// 필터링 조건: 한 달 이내, 푸시 타입이 일치 (광고성 등), isUnreadOnly가 true 일 경우 안읽은 푸시만 표시
return filteredList.filter { push ->
push.date > cal.time && push.type == pushType && (!isUnreadOnly || !push.isOpened)
}
}
728x90
'TIL - Kotlin' 카테고리의 다른 글
[Kotlin] RxJava의 mergeDelayError를 Coroutine Flow로 만들기 Coroutine Flow merge (0) | 2024.01.09 |
---|---|
[Kotlin] List.map 파헤치기 (0) | 2023.07.20 |
[Kotlin] 유용한 Collection 함수 (0) | 2023.07.04 |
[Kotlin] 코틀린 코드 스니펫 돌려보기 (0) | 2023.06.26 |
[Kotlin] 유용한 List 고차함수 (0) | 2023.04.18 |