[27강] https://youtu.be/6iZDjLvhMN8
[28강] https://youtu.be/pFk72oghDLo
1. 컬렉션 함수
문법 :
컬렉션명.forEath{바디}
반환값이 true/false인 경우
컬렉션명.any{바디} ==> OR : 하나라도 참이면
컬렉션명.all{바디} ==> AND : 모두 참이면
컬렉션명.none{바디} ==> !AND : 모두 참이 아니면
검색값 반환
컬렉션명.first{바디}
컬렉션명.last{바디}
컬렉션명.count{바디}
※ 컬렉션명.firstOrNull{바디} : 조건 검색값이 없을 때, Exception을 발생하므로 Null을 반환할 수 있도록 사용
lastOrNull
https://www.tutorialkart.com/kotlin/kotlin-list-foreach-example/
fun main() {
val names = listOf<String>("박수영", "김지수", "김다현", "신유나", "김지우")
names.forEach{ print(it + " ") }
println()
println(names.filter{ it.startsWith("김")})
println(names.any{ it == "김지연" }) // '김지연'이 있나? ==> No
println(names.all{ it.length == 3}) // 모두 {이름이 3글자?} ==> Yes
println(names.none{ it.startsWith("이")}) // 없나? {성이 '이'씨} ==> Yes
println(names.first{ it.startsWith("김") }) // 처음{성이 '김'씨} ==> "김지수"
println(names.last{ it.startsWith("김") }) // 마지막{성이 '김'씨} ==> "김지우"
println(names.count{ it.startsWith("김") }.toString() + "명") // 갯수{성이 '김'씨} ==> 3 명
println(names.firstOrNull{ it.startsWith("이") }) // 처음{성이 '이'씨} ==> null(없음)
println(names.lastOrNull{ it.startsWith("이") }) // 마지막{성이 '이'씨} ==> null(없음)
}
박수영 김지수 김다현 신유나 김지우
[김지수, 김다현, 김지우]
false
true
true
김지수
김지우
3명
null
null
2. associateBy, groupBy, partition
fun main() {
data class Person(val name: String, val birthYear: Int)
val personList = listOf(Person("유나", 1999),
Person("조이", 1986),
Person("츄", 1999),
Person("유나", 2003))
println("원본 : " + personList)
println(" * associateBy 예) 출생연도로")
println(personList.associateBy{it.birthYear}) // MAP으로 반환 : {}
personList.associateBy{it.birthYear}.forEach{k,v -> print(k.toString() + "=" + v.name + " ")}
println()
println(" * groupBy 예) 이름으로") // MAP으로 반환 : {} 내부에 리스트 []
println(personList.groupBy{it.name})
personList.groupBy{it.name}.forEach{k,v ->
print(k + "=[")
v.forEach{
print("${it.birthYear} ")
}
print("] ")
}
println()
println(" * partition 리스트") // List로 반환 : {} 내부에 리스트 []
val(p1, p2) = personList.partition { it.birthYear > 1998 }
println(p1)
println(p2)
}
원본 : [Person(name=유나, birthYear=1999), Person(name=조이, birthYear=1986), Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]
* associateBy 예) 출생연도로
{1999=Person(name=츄, birthYear=1999), 1986=Person(name=조이, birthYear=1986), 2003=Person(name=유나, birthYear=2003)}
1999=츄 1986=조이 2003=유나
* groupBy 예) 이름으로
{유나=[Person(name=유나, birthYear=1999), Person(name=유나, birthYear=2003)], 조이=[Person(name=조이, birthYear=1986)], 츄=[Person(name=츄, birthYear=1999)]}
유나=[1999 2003 ] 조이=[1986 ] 츄=[1999 ]
* partition 리스트
[Person(name=유나, birthYear=1999), Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]
[Person(name=조이, birthYear=1986)]
3. flatMap, getOrElse, zip
fun main() {
var objects = listOf("객체1", "객체2", "객체3")
println(objects.flatMap { listOf(it + "-1", it + "-2")})
println(objects.getOrElse(0){"없음"})
println(objects.getOrElse(3){"없음"})
val names = listOf("A", "B", "C", "D", "E")
println(objects zip names)
}
[객체1-1, 객체1-2, 객체2-1, 객체2-2, 객체3-1, 객체3-2]
객체1
없음
[(객체1, A), (객체2, B), (객체3, C)]
'코틀린' 카테고리의 다른 글
[Youtube DiMo] 30강. 비트연산 (0) | 2022.05.03 |
---|---|
[Youtube DiMo] 29강. 변수 (0) | 2022.05.03 |
[Youtube DiMo] 26강. Set / Map (0) | 2022.05.03 |
[Youtube DiMo] 25강. Data / Enum (0) | 2022.05.03 |
[Youtube DiMo] 24강. 내부클래스 (0) | 2022.04.30 |
댓글