컴퓨터 언어/코틀린

[Kotlin] 코틀린 컬렉션 클래스 (collection)

훈츠 2020. 2. 24. 00:41
반응형

안녕하세요. 훈츠입니다. 이번 시간에는 코틀린 에서 제공하는 List,Set,Map 을 사용하면 기본적으로 사용할수있는 컬렉션에 대해 이야기 해보겠습니다. 컬렉션 함수에 대해 설명한 이전 포스팅도 같이 한번 보시면 도움이 될것 같습니다. 

https://rain2002kr.tistory.com/91?category=361958

 

[Kotiln] 코틀린 컬렉션 함수 : 리스트, 셋, 맵(List, Set, Map)

var list = listOf(1,2,3,4,5) var mutablelist :MutableList = mutableListOf() 안녕하세요. 훈츠 입니다. 오늘은 컬렉션 함수중 리스트에 대해 설명 드리도록 하겠습니다. 컬렉션 함수 리스트 (List) List..

rain2002kr.tistory.com

다양한 함수

  • .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))]

 코틀린에서 다양한 컬렉션 함수를 제공해주므로 잘 기억하고 있다가, 적절한 상황에서 사용할수 있으면 효율적일거 같습니다. 그럼 오늘도 안녕히 즐 코딩 하십시요. 

반응형