Kotlin - Collection 함수들

이동수·2024년 11월 7일

Kotlin

목록 보기
33/33
post-thumbnail

컬렉션 함수

람다함수를 사용해 컬렉션을 좀 더 편리하게 쓰는 함수

.add(element: E)

데이터를 목록 끝에 삽입함

.add(index: Int, element: E)

인덱스 데이터를 삽입함

.remove(element: E)

목록에 처음 나타나는 E를 제거

.removeAt(index: Int)

인덱스에 있는 데이터를 삭제함

forEach{ }

forEach{println(it)}

컬렉션안의 모든 함수를 it이라는 변수로 순서대로 참조가능

forEachIndexed()

index,value 같이 순서대로 참조?

filter{}

filter{ it < 4 }

특정한 조건걸기, 조건에 맞는 컬렉션만 반환해줌

map{}

map{it*2}

it에 수식을 적용해 값을 변형해 반환해줌

any{ 조건 }

하나라도 조건에 맞으면 true

all{ 조건 }

모두 조건에 맞으면 true

none{ 조건 }

모두 조건에 맞지 않으면 true

일반함수로쓰는건(), 람다함수식으로{} 이렇게 쓰면 밑처럼 쓰임

first{ }

first{it>3}

조건에 맞는 첫번째 아이템 반환
(first는 일반함수()로 쓰면 첫번째 객체반환, 앞에서 배움)

last{ }

last{it>3}

조건에 맞는 마지막 아이템 반환

find{}

해당 조건에 맞는 첫번째 요소를 반환.

해당요소가 없으면 null 반환

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

val people = listOf(
    Person("Alice", 30),
    Person("Bob", 25),
    Person("Charlie", 35)
)

val personNamedBob = people.find { it.name == "Bob" }
println(personNamedBob)  // Output: Person(name=Bob, age=25)

findLast{}

fistOrNull{}, LastOrNull{}

fisrt, last쓸때 객체가 없으면 에러발생 -> firstOrNull, LastOrNull사용 하면됨(객체 없으면 null반환)

count{ 조건 }

조건에 맞는 아이템 갯수 반환
(일반함수()로 쓰면 모든 아이템갯수 반환)

associateBy{}

  • 객체에서 key를 추출해 map으로 변환하는 함수

a.associateBy{ it.name } // key로 사용할 속성을 넣어주면댐
이동수 to 1998, 소진호 to 1997에서, 심성재 to 1997
(이동수 =(이동수 = 1998)), (소진호 = (소진호 = 1997)), (심성재 =~~)로

groupBy{}

  • key가 같은 아이템끼리 배열로 묶어 map으로 만드는 함수

a.groupBy{ it.birthday } //
1998 = (이동수 =1998), 1997 = ((소진호 = 1997),(심성재 = 1997))

partition{ 조건 }

  • 아이템에 조건을 걸어 두개의 컬렉션으로 나누어 줌(true or false로 나눔)
  • first, second로 참조해 사용

val(over2002, under2002) = a.partition{ it.birthaday > 2002 }
over2002, under2002 조건 2개생김

fun main(){
    data class Person(val name : String, val birthday: Int) //함수안에 class, data class되네?

    val personList = listOf(Person("유나",1992),
                            Person("조이", 1996),
                            Person("츄", 1999),
                            Person("유나", 2003))

    println(personList.associateBy { it.birthday })
    //{1992=Person(name=유나, birthday=1992), 1996=Person(name=조이, birthday=1996), 1999=Person(name=츄, birthday=1999), 2003=Person(name=유나, birthday=2003)}
    println(personList.groupBy { it.name })
    //{유나=[Person(name=유나, birthday=1992), Person(name=유나, birthday=2003)], 조이=[Person(name=조이, birthday=1996)], 츄=[Person(name=츄, birthday=1999)]}

    val(over1998, under1998) = personList.partition { it.birthday > 1998 }
    println(over1998) //[Person(name=츄, birthday=1999), Person(name=유나, birthday=2003)]
    println(under1998) //[Person(name=유나, birthday=1992), Person(name=조이, birthday=1996)]
}

flatMap{}

  • 아이템마다 만들어진 컬렉션을 합쳐서 반환하는 함수

a.flatMap{ listOf(it*3,it+3) }

  • 처음에 2,3있었으면 6,5,9,6됨

getOrElse(){}

  • 인덱스 위치에 아이템이 있으면 아이템을 반환하고, 아닌경우 지정한 기본값을 반환하는 함수

a.getOrElse(1){ 50 }

  • ()안의 인덱스에 객체가 있으면 해당객체반환(1 있으면 [1]반환)
  • ()안의 인덱스에 객체가 없으면 {}객체 반환(1에 아무것도 없으면 [1] =50 넣음) a = (1,2,3,4,5)
    a.getOrElse(1){50} = 2
    a.getOrElse(6){50} = 50

zip 컬렉션

  • 컬렉션 두개의 아이템을 1:1로 매칭해 새 컬렉션을 만듬
    • 결과리스트의 아이템 갯수는 더 작은 컬렉션을 따라가게됨
      a = listOf(1,2,3,4)
      b = listOf(a,b,c,d,e,f)
      a zip b
      [(1,a),(2,b),(3,c),(4,d)]

reduce(), reduceRight()

fold(), foldRight()

reduce랑 비슷

max(),maxBy, min(), minBy()

sumBy()

Int만됨. 그냥 쓰지마. sumOf()써

sumOf()

Int말고 double,float 등 가능

데이터를 하나씩 불러와 합칠때

val totalSales = order.entries.sumOf { (menu, quantity) ->
                menu.price * quantity
            }
  • order라는 map(map<메뉴.갯수>을 가져와서 entries로 key,value를 사용할 수 있게해주고 메뉴 가격과 갯수를 곱해서 총 합 가격을 구하기
val totalSales = orders.sumOf{ order ->
            order.menu.entries.sumOf { (menu, quantity) ->
                menu.price * quantity
            }
       }
  • 2중으로도 사용함

drop(), dropWhile(), dropLastWhile()

slice(), take(), takeLast(), takeWhile()

Map에서만

.entries()

map에서 쓰임.

map에서 key. value값을 반환하여 사용할때 사용

fun main() {
    val map = mapOf("a" to 1, "b" to 2, "c" to 3)
    
    // Accessing the entries
    for (entry in map.entries) {
        println("Key: ${entry.key}, Value: ${entry.value}")
    }
}                             

.getOrDefault()

.getOrDefault(검색 하려는 관련 값이 있는 키, 맵에서 키를 찾을 수 없는 경우 반환될 값)

문자열, 정수, boolean 뭐든 상관없음

return시키는거!

  • 키가 있으면 그 키의 값리턴
  • 없으면 default값 리턴
val ageMap = mapOf("Alice" to 25, "Bob" to 30, "Charlie" to 35)

val aliceAge = ageMap.getOrDefault("Alice", -1)  // Returns 25
println($aliceAge")  // 25
 
val davidAge = ageMap.getOrDefault("David", -1)  // Returns -1 (default value)
println($davidAge")  // -1
  • getOrDefault()는 키가 맵에 없는 경우 반환할 기본값을 지정할 수 있도록 하여 맵 조회를 단순화

0개의 댓글