Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • webflux
  • 코딩테스트
  • 코틀린
  • MariaDB
  • 프로그래머스
  • 에라토스테네스의 체
  • kibana
  • 백준
  • elasticsearch
  • 내림차순
  • 프리코스
  • kotlin
  • 레포지토리
  • 파이썬
  • java
  • spring
  • 코틀린 인 액션
  • enum
  • Wil
  • 안드로이드
  • rsocket
  • Docker
  • Android
  • SQL
  • 우아한테크코스
  • til
  • ec2
  • 다이나믹 프로그래밍
  • grafana
  • 문자열

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Android/Kotlin

[Kotlin] List, Set, Map, Collection Operations

2022. 9. 16. 17:12

Collections

1. List

- ordered collection

- index로 원소에 접근 가능

listOf(1,2,2) --> [1,2,2]

2. Set

- unique elements

setOf(1,2,2) ---> [1,2]

3. <Map>

- key-value pairs

- 동일한 key에 대해 하나의 value만 가짐

mapOf("first" to 1, "second" to 2, "second" to 3) --> {first=1, seconde=3}

4. Type

    1) read-only

val numbers = listOf("one", "two", "three", "four")

    2) mutable

      - 순서를 가지며, 변경이 가능

val numbers = mutableListOf("one", "two", "three", "four")
val mutableIterator = numbers.iterator()

mutableIterator.next()
mutableIterator.remove() // [two, three, four]

 

Collection operations - Retrieve

1. position

- 데이터의 위치 정보 조회

    (1) index

val list = listOf(1,2,3,4,5)
println("${list.elementAt(0)}") // 0번째 원소 1 출력
println("${list.elementAtOrNull(5)}") // 해당 인덱스 데이터가 없으면 NUll 반환
println("${list.elementAtOrElse(5){-1}}") // 해당 인덱스 데이터가 없으면 기본값 지정

    (2) 확장함수

    - 특정 위치 요청

    - first() : 0번째 데이터 반환

    - fistOrNull() : 0번째 데이터가 없을 경우 Null 반환

    - last() : 마지막 데이터 반환

    - lastOrNull() : 마지막 데이터가 없을 경우 Null 반환

println("${list.first()}, ${list.firstOrNull()}")
println("${list.last()}, ${list.lastOrNull()}")

2. condition

- 함수의 argument로 조건 전달

// it : 리스트의 원소
// 리스트의 원소를 순차적으로 꺼내 3보다 큰 첫 번째 원소 출력
println("${list.firstOrNull {it > 3 }}") 
println("${list.find { it > 3 }}")

// 리스트의 원소를 마지막부터 순차적으로 꺼내 3보다 큰 첫 번째 원소 출력
println("${list.lastOrNull {it > 3 }}") 
println("${list.findLast { it > 3 }}")

 

Collection operations - Transformation

- 데이터의 반환 값을 변경하는 것과 관련된 연산

1. Map

val numbers = setOf(1,2,3)
println(numbers.map {it * 3}) // [3, 6, 9]
println(numbers.mapIndexed {idx, value -> value * idx}) // [0, 2, 6]

2. String representation

- separator : collection 원소의 구분자

- prefix : 문자열 처음에 붙을 문구

- postfix : 문자열 마지막에 붙을 문구

val numbers = listOf("one", "two", "three", "four")
println(numbers.joinToString(
    separator = " | ",
    prefix = "start: ",
    postfix = ": end"
))
// start: one | two | three | four: end

 

Collection operations - Filtering

- 데이터를 필터링하는 기준을 세우고 기준에 맞게 분류하는 연산

1. predicate

val numbers = listOf("one", "two", "three", "four")
// 문자열 길이가 3보다 큰 원소를 필터링해서 출력
val longerThan3 = numbers.filter {it.length > 3}
println(longerThan3) // [three, four]

 

val numbers = listOf("one", "two", "three", "four")

println(numbers.any{it.endsWith("e")}) // true
println(numbers.none{it.endsWith("a")}) // true
println(numbers.all{it.endsWith("e")}) // false

- any : 조건을 만족하는 원소가 하나라도 있으면 true 반환

- none : 조건을 만족하는 원소가 하나라도 없을 때 true 반환

- all : 모든 원소가 조건을 만족해야 true 반환

 

2. partition

- 조건을 만족하는 그룹과 만족하지 못하는 그룹으로 분류하는 연산

val numbers = listOf("one", "two", "three", "four")
val (match, rest) = numbers.partition {it.length > 3}

println(match) // [three, four]
println(rest) // [one, two]

 

Collection operations - Grouping

private val products = arrayOf(
        Product("패션","겨울 패딩"),
        Product("패션","겨울 바지"),
        Product("전자기기","핸드폰"),
        Product("전자기기","블루투스 이어폰"),
        Product("전자기기","노트북"),
        Product("반려동물물품","건식사료"),
        Product("반려동물물품","습식사료"),
        Product("반려동물물품","치약"),
        Product("반려동물물품","간식"),
    )
private val categories: Map<String, List<Product>> = products.groupBy { product ->
    product.categoryLabel
}

categoryLabel을 key로 갖고 카테고리에 해당하는 상품 목록을 value로 갖는 Map 타입으로 변환

 

728x90

'Android > Kotlin' 카테고리의 다른 글

[Kotiln] Nested & inner class, Extension함수, Generics  (0) 2022.09.16
[Kotlin] object  (0) 2022.09.16
[Kotlin] Package, 가시성 변경자(public,private,internal,protected)  (0) 2022.09.11
[Kotlin] 클래스 toString/equals/hashCode, data class  (0) 2022.09.10
[Kotlin] 함수, Superclass, Subclass  (0) 2022.09.10
    'Android/Kotlin' 카테고리의 다른 글
    • [Kotiln] Nested & inner class, Extension함수, Generics
    • [Kotlin] object
    • [Kotlin] Package, 가시성 변경자(public,private,internal,protected)
    • [Kotlin] 클래스 toString/equals/hashCode, data class
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바