์์ฆ ์ฑ๋ค์ Listํ์์ผ๋ก ๋ฐ์ดํฐ๋ค์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
์ธ์คํ, ์ ํ๋ธ, ํ์ด์ค๋ถ, ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ ๋ฑ๋ฑ ์ ๊ทธ๋ฐ ์ฑ์ ์ฐพ๊ธฐ๊ฐ ํ๋ค๋ค.
๊ทธ๋ฌ๋ฉด Listํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ณ ๊ทธ๋ฅ ๋ฟ๋ ค์ฃผ๋ฉด ์๊ด ์์ง๋ง
์น์ ํ์ง ์์ data๋ค์ด ๊ฐํน ์๋๋ฐ ์ด ๋ฐ์ดํฐ๋ค์ sortingํ๊ฑฐ๋ ์ ๊ฑฐ ํน์ ๋ณํฉํด์ผํ๋ ์ํฉ์ด ์๊ธด๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ํ์๋ค์ด ์ฌ๋ ธ๋ ๊ฒ์๋ฌผ๋ค์ ํ์๋ณ๋ก ๋ฌถ์ด์ ๋ณด์ฌ์ค์ผํ๋ ์ํฉ์ด ์๋๋ฐ ์๋ฒ์์ ๊ทธ๋ฅ ๊ฒ์๊ธ๋ง ์ซ~ ๋ด๋ ค์ฃผ๊ณ ์ฑ์์ ํด์ฃผ์ธ์~ ํ๋ฉด ๋ณดํต for ๋ฌธ์ ๋๋ ค์ ํ์ ์์ด๋๋ ์ผ์นํ๋ฉด ๋ฆฌ์คํธ์ ๋ค์ ๋ด๊ณ ์ฐ๋ผ์ฐ๋ผ~
์๋ฌดํผ! ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌ, ๊ด๋ฆฌํ๋๋ฐ ๊ต์ฅํ ๊ท์ฐฎ๋ค. ๊ทธ๋ฌ๋ฉด ๋์์ด ๋ญ๊ฐ ์๋?
→ Kotlin์ Collections ํจ์๋ฅผ ์ธ ๊ฒ์ด๋ค.
๊ทธ๊ฒ ๋ญ๋ฐ?
→ Collections์ List, set, map๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ ์๋ฃ๊ตฌ์กฐ๋ก ๋ค์์ ๊ฐ์ฒด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ชจ์์ ๋๋ก ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ฝํ๋ฆฐ์ ์ปฌ๋ ์ ์ ํ๋ถํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค.
์ฝ 200๊ฐ๊ฐ ์กด์ฌํ๋๋ฐ ์ด๊ฒ๋ค์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋จผ์ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ์ ํ์๊ฐ ์์ต๋๋ค.
๋ฌผ๋ก ์ด๊ฒ๋ค ์ค ํ๋๋ฅผ ์ฐพ๊ธฐ ์ํด์ 200๊ฐ๋ฅผ ๋ชจ๋ ํ์ด๋ณด๋ ๊ฒ์ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ํ์๊ฐ ์ฌ์ฉํ๋ ํจ์๋ค์ ์์ฃผ๋ก ์ ๋ฆฌํ ์์ ์ด๋ค.
1. Filter (ํํฐ!)
์๋ฒ์์ ๋ด๋ ค์ค๋ ๊ฒ๋ค ๋ฐ์ดํฐ์์ ํ์ ์์ด๋๊ฐ 27์ธ ์ฌ๋์ ๊ธ๋ง ๋ณด๊ณ ์ถ๋ค! ๋ผ๊ณ ํ๋ฉด filter ํจ์๋ฅผ ์ฐ๋ฉด ๋๋ค.
data class Cert (
val id: Int,
val title: String,
val comment: String,
val memberName: String,
val memberId: Int
)
// ๋์ถฉ ์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ค ์๊ฐํด์ฃผ๊ธธ ๋ฐ๋๋ค.
val list = LiveData<Resource<List<Cert>>>
// ํ์ ์์ด๋๊ฐ 27์ธ ์ฌ๋์ ๊ฒ์๊ธ๋ง ๋ณด์
val memberId27 = list.filter { cert ->
cert.memberId == 27
}
// ํ์ ์์ด๋๊ฐ 59์ธ ์ฌ๋์ comment์ "์ง์งํ๋ค"๋ผ๋ ๊ธ์ด ํฌํจ๋ ๊ฒ์๊ธ๋ง ๋ณด์
val memberId59Serious = list.filter { cert ->
cert.memberId == 59
}.filter { cert ->
cert.comment.contains("์ง์งํ๋ค")
}
์ ๋ ๊ฒ ํ๋ฉด memberId๋ฅผ ๊ฐ์ง Cert์ ๋ชจ๋ธ๋ง ๊ฐ์ง๊ฒ ๋๋ค.
๋ ๋ฒ์งธ ์์๋ฅผ ๋ณด๋ฉด ๊ณ์ํด์ ํจ์๋ฅผ ์ฐ๊ฒฐํ ์๋ ์๋ค.
2. Map (๋งต!)
mapํจ์์ ๊ฒฐ๊ณผ ๋ํ filter์ฒ๋ผ for๊ณผ if๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์๋ ์์ง๋ง
map ํจ์๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋จํ๊ฒ ํ์ค๋ก๋ ์์ฑ์ด ๊ฐ๋ฅํด ์ง๋ค.
๋ํ, filter๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ List ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง ์๋ ์์์ง๋ง map์ List ํฌ๊ธฐ๋ ์ ์ง๋๋ค.
data class Cert (
val id: Int,
val title: String,
val comment: String,
val memberName: String,
val memberId: Int
)
val list1 = listOf(
Cert(1, "hi", "Android!", "Jacob", 101),
Cert(2, "bye", "World!", "SeungWon", 102)
)
val list2 = ml.map { it.id += 10 }.map { it.comment = it.comment + " Good!" }
// [Cert(11, "hi", "Android! Good!", "Jacob", 101), Cert(12, "bye", "World! Good!", "SeungWon", 102)]
3. SortBy (์ ํธ๋ฐ์ด~)
ํ์๊ฐ ์ด๋ฒ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํจ์์ด๋ค.
์ฝ๊ฒ๋งํด ์์๋๋ก ์ ๋ ฌํ ์ ์๋ ํจ์์ด๋ค.
data class Cert(
val id: Int,
val nickname: String, // ๊ฐ๋๋ค๋ผ, abcd
val createdAt: String, // yyyy-MM-ddThh:mm:ss
)
list.sortedBy {
it.createdAt
}.sortedBy {
it.nickname
}.sortedBy {
it.id
}
// ์ด๋ ๊ฒ ํ๋ฉด createdAt์ -> nickname์ -> id์์ผ๋ก ์ ๋ ฌ๋๋ค.
// ๋ ์ญ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด
list.sortedByDescending { it.id } // ๋ก ๊ฐ๋ฅํ๋ค.
4. distinct(๋์คํ ํฌํธ!)
์ด๊ฑฐ๋ ์ค๋ณต์ผ๋ก ๋ค์ด๊ฐ์ ธ์๋ค๋ฉด ํ๋๋ง ๋จ๊ธฐ๊ณ ๊ทธ๋๋~ ๋ฆฌ์คํธ๋ฅผ ๋ฐํ๋ค.
data class Cert (
val id: Int,
val title: String,
val comment: String,
val memberName: String,
val memberId: Int
)
val list1 = listOf(
Cert(1, "hi", "Android!", "Jacob", 101),
Cert(2, "bye", "World!", "SeungWon", 102)
Cert(3, "hi", "Android!", "Jacob", 103),
Cert(2, "bye", "World!", "SeungWon", 102),// 2๋ฒ์งธ ๋ชจ๋ธ๊ณผ ๋๊ฐ๋ค.
Cert(2, "bye", "World!", "SeungWon", 103) // ์์ ๊ฒ๊ณผ memberId๋ง ๋ค๋ฅด๋ค.
)
val list2 = list1.distinct()
// [Cert(1, "hi", "Android!", "Jacob", 101),
// Cert(2, "bye", "World!", "SeungWon", 102),
// Cert(3, "hi", "Android!", "Jacob", 103),
// Cert(2, "bye", "World!", "SeungWon", 103)]
// ๋ชจ๋ธ ์์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ๊ฐ์ ๊ฐ์ฒด๋ง ์ฌ๋ผ์ก๋ค.
ํน์ ์ฌ์ฉํ๊ณ ์ถ์ ํจ์๋ค์ด ์๋ค๋ฉด ์๋์ ๋งํฌ์์ ์ฐพ์ ์ฌ์ฉํด๋ด๋ ์ข๋ค.
(์ค๋ช ์ด ์์ฃผ ์ ๋์ด์๋ค.)
kotlin.collections - Kotlin Programming Language
kotlinlang.org
์ฐธ๊ณ : https://medium.com/hongbeomi-dev/kotlin-collection-ํจ์-7a4b1290bce4
'Development > Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kotlin ์ฝ๋๋ฅผ ๋ณด๋ค ๊น๋ํ๊ฒ ๋ง๋ค๊ธฐ (0) | 2022.09.04 |
---|