Collection 함수 > IT 기술백서

IT 기술백서

직접 알아내거나 검색하기 귀찮아서 모아 둔 것

Android | Collection 함수

본문

1. 기본함수들

 

[code]

fun main() {

    var nameList = listOf("박수영", "김지수", "김다현", "신유나", "김지우", "김지연", "김지연")

    nameList.forEach{

        println(it + " ")

    }

    println()

    

    println("filter: " + nameList.filter{ it.startsWith("김") })

    

    println("map: " + nameList.map{ "이름: " + it })

    

    println("any: " + nameList.any{ it === "김지연" })

    

    println("none: " + nameList.none{ it.startsWith("이") })

    

    println("first: " + nameList.first{ it.startsWith("김") })

    println("firstOrNull: " + nameList.firstOrNull{ it.startsWith("함") })

    println("first(): " + nameList.first())

    

    println("last: " + nameList.last{ it.startsWith("김") })

    println("lastOrNull: " + nameList.lastOrNull{ it.startsWith("함") })

    println("last(): " + nameList.last())

    

    println("count: " + nameList.count{ it.contains("지") })

}

[/code]

 

 

2. associateBy, groupBy, partition 

[code]

fun main() {

    data class Person(val name: String, val birthYear: Int)

    

    val personList = listOf(

        Person("유나", 1992),

        Person("조이", 1996),

        Person("츄", 1999),

        Person("유나", 2003))

    

    // associateBy: 조건에 주어진 키로 새 맵을 반환

    println("associateBy: " + personList.associateBy{ it.birthYear })

 

    // 조건에 맞는것끼리 묶어서 새 맵을 반환

    println("groupBy: " + personList.groupBy{ it.name })

 

    // partition: 조건이 참인것과 거짓인것끼리 따로 반환한다    

    val (over98, under98) = personList.partition { it.birthYear > 1998 }

    println("partition")

    println("  over98: " + over98)

    println("  under98: " + under98)

}

[/code]

 

결과

[code]

associateBy: {1992=Person(name=유나, birthYear=1992), 1996=Person(name=조이, birthYear=1996), 1999=Person(name=츄, birthYear=1999), 2003=Person(name=유나, birthYear=2003)}

groupBy: {유나=[Person(name=유나, birthYear=1992), Person(name=유나, birthYear=2003)], 조이=[Person(name=조이, birthYear=1996)], 츄=[Person(name=츄, birthYear=1999)]}

partition

  over98: [Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]

  under98: [Person(name=유나, birthYear=1992), Person(name=조이, birthYear=1996)]

[/code]

 

3. flatMap, getOrElse, zip

 

[code]

fun main() {

val numbers = listOf(-3, 7, 2, -10, 1)

    // flatMap: 요소에서 1개씩 flatMap 에 정의된 대로 만들어서

    // 하나의 컬렉션으로 합쳐서 반환한다

    println("flatMap: " + numbers.flatMap { listOf(it * 10, it + 10) })

    

    // getOrElse: 인덱스에 해당하는 값을 가져오되 없으면 중괄호 안에 기본값을 가져온다

    println("getOrElse: " + numbers.getOrElse(1) { 50 })

    println("getOrElse: " + numbers.getOrElse(10) { 50 })

    

    val names = listOf("A", "B", "C", "D")

    

    // 두 컬렉션을 인덱스로 매칭하여 컬렉션을 만든다.

    // 두 컬렉션 중 갯수가 작은 것에 맞게 생성한다

    println("zip: " + (names zip numbers))

}

[/code]

 

결과

[code]

flatMap: [-30, 7, 70, 17, 20, 12, -100, 0, 10, 11]

getOrElse: 7

getOrElse: 50

zip: [(A, -3), (B, 7), (C, 2), (D, -10)]

[/code]

댓글 0개

등록된 댓글이 없습니다.

Menu