반응형
안녕하세요. 훈츠입니다. 이번 시간에는 코틀린 에서 제공하는 List,Set,Map 을 사용하면 기본적으로 사용할수있는 컬렉션에 대해 이야기 해보겠습니다. 컬렉션 함수에 대해 설명한 이전 포스팅도 같이 한번 보시면 도움이 될것 같습니다.
https://rain2002kr.tistory.com/91?category=361958
다양한 함수
- .forEach{ } : for문 대용으로 사용 할수 있습니다.
- .filter { } : 필터 조건에 만족하는 값을 리턴 해줍니다.
- .map { } : 값을 변경해서 다시 매칭 시켜줍니다. 일괄적으로 값을 변경 가능 합니다.
- .collection.any {it == 0 } : 하나라도 조건이 만족하면, true값을 반환 합니다.
- .collection.all {it == 0 } : 모두 조건에 만족해야만, true값을 반환 합니다.
- .collection.none {it == 0 } : 하나도 조건이 만족하지 않으면, true값을 반환 합니다.
- First 함수
- .collection.first ( ) : 첫번째 아이템을 반환합니다.
- collection.first { it > 3 } : 조건에 맞는 첫번째 아이템을 반환 합니다.
- first -> find로 바꿔서 사용도 가능합니다.
- collection.firstOrNull () : 조건에 맞는 아이템이 없으면 null 값을 반환 합니다.
- Last 함수
- .collection.last ( ) : 마지막 아이템을 반환합니다.
- collection.last { it > 3 } : 조건에 맞는 마지막 아이템을 반환 합니다.
- first -> findLast 로 바꿔서 사용도 가능합니다.
- collection.lastOrNull () : 조건에 맞는 아이템이 없으면 null 값을 반환 합니다.
- Count 함수
- .collection.count ( ) : 모든 아이템 갯수를 반환합니다.
- .collection.count { it > 7 } : 조건에 맞는 아이템 갯수를 반환합니다.
fun main() {
val joblist = listOf("의사","변호사","검사","농부","사업가","약사","연예인")
val namelist = listOf("김진국","오나라","박새로이","조이서","김건모","김국진","이민정")
joblist.forEach({print(it +" ")})
println()
println(joblist.filter{it.startsWith("검")})
println(joblist.map { "직업 : "+ it })
println(namelist.any({it == "이민정"}))
println(namelist.all({it.length == 3}))
println(namelist.none({it.startsWith("박")}))
println(namelist.first({it.startsWith("김")}))
println(namelist.lastOrNull({it.endsWith("정")}))
println(namelist.count{it.contains("지")})
}
//출력 결과
의사 변호사 검사 농부 사업가 약사 연예인
[검사]
[직업 : 의사, 직업 : 변호사, 직업 : 검사, 직업 : 농부, 직업 : 사업가, 직업 : 약사, 직업 : 연예인]
true
false
false
김진국
이민정
0
복잡한 기능의 컬렉셔 함수
- .associateBy { it.name } : 일반 list 를 map으로 변환 합니다.
- .groupBy { it.age > 30 } : 특정 조건으로 map으로 변환 합니다.
- .partition { } : 조건을 걸어 두개의 map으로 변환 합니다.
- .flatMap { it*3, it+10 } : 하나의 리스트에 key와 value 조건을 걸어 map을 만듭니다.
- .getOrElse (1) { 50 } : 인덱스 위치 "1" 에 아이템이 있으면 아이템을 반환하고, 없으면 지정한 "50"을 반환합니다.
- zip함수 : 컬렉션 두개의 아이템을 1:1로 매칭하여 새 컬렉션을 만듭니다.
- collection A zip collectionB
data class Person(val name:String, val age:Int){}
fun main() {
val joblist = listOf("의사","변호사","검사","농부","사업가","약사","연예인")
val namelist = listOf("오나라","박새로이","조이서","김건모","김국진","이민정","장나라")
val personList = listOf(Person("오나라",31),Person("박새로이",31),
Person("조이서",20),Person("김용만",59),Person("김국진",59),
Person("이민정",38),Person("장나라",40))
println(personList.associateBy { it.age })
println(personList.groupBy { it.age > 40 })
val (over40, under40) = personList.partition { it.age > 40 }
println (over40)
println (under40)
val numbers = listOf(-3,7,2,-10,1)
println(numbers.flatMap { listOf(it * 10, it + 10) })
println(numbers.getOrElse(1){50})
println(numbers.getOrElse(10){50})
println(joblist.zip(personList))
}
//출력화면
{31=Person(name=박새로이, age=31), 20=Person(name=조이서, age=20), 59=Person(name=김국진, age=59), 38=Person(name=이민정, age=38), 40=Person(name=장나라, age=40)}
{false=[Person(name=오나라, age=31), Person(name=박새로이, age=31), Person(name=조이서, age=20), Person(name=이민정, age=38), Person(name=장나라, age=40)], true=[Person(name=김용만, age=59), Person(name=김국진, age=59)]}
[Person(name=김용만, age=59), Person(name=김국진, age=59)]
[Person(name=오나라, age=31), Person(name=박새로이, age=31), Person(name=조이서, age=20), Person(name=이민정, age=38), Person(name=장나라, age=40)]
[-30, 7, 70, 17, 20, 12, -100, 0, 10, 11]
7
50
[(의사, Person(name=오나라, age=31)), (변호사, Person(name=박새로이, age=31)), (검사, Person(name=조이서, age=20)), (농부, Person(name=김용만, age=59)), (사업가, Person(name=김국진, age=59)), (약사, Person(name=이민정, age=38)), (연예인, Person(name=장나라, age=40))]
코틀린에서 다양한 컬렉션 함수를 제공해주므로 잘 기억하고 있다가, 적절한 상황에서 사용할수 있으면 효율적일거 같습니다. 그럼 오늘도 안녕히 즐 코딩 하십시요.
'컴퓨터 언어 > 코틀린' 카테고리의 다른 글
[Kotiln] 코틀린 전체 소개 (0) | 2020.04.04 |
---|---|
[Kotlin] 코틀린 변수의 활용 (상수, 늦은 초기화,지연 대리자)const, lateinit, lazy by { } (0) | 2020.02.24 |
[Kotlin] 코틀린 데이터 & 이늄 클래스 (data & enum class) (0) | 2020.02.22 |
[Kotiln] 코틀린 중첩 클래스와 내부 클래스 (0) | 2020.02.21 |
[Kotiln] 코틀린 함수의 활용 Vararg (0) | 2020.02.19 |