TIL - Kotlin
[Kotlin] List.filter 파헤치기
cocokaribou
2024. 4. 16. 17:18
다양한 조건을 만족하는 요소들만 남긴 리스트 리턴하기.
물론 한 방에 여러가지 필터 조건을 적용시키기 보다 상황별로 함수를 분리하는 것도 방법이다.
예시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