Collection 확장함수

정용우·2023년 8월 2일

Collection 연산

val list1 = listOf(1, 2, 3)
println(list1 + 4) // [1, 2, 3, 4]

val list2 = listOf(4, 5, 6)
println(list1 + list2) // [1, 2, 3, 4, 5, 6]

val map = mapOf("a" to 1, "b" to 2, "c" to 3)
println(map - b) // { a=1, c=3 }

filter

  • filter: 특정 조건에 대해 true인 요소만 남김
  • filterNot: 특정 조건에 대해 false인 요소만 남김
  • filterIndexed: 조건 확인에 index도 사용한다
  • filterIsInstance(): T 타입의 요소만 담은 리스트 반환
  • filterTo(Collection): 해당 조건의 요소 파라미터 Collection에 삽입

map

  • map: 요소 값에 대해 특정 값의 list 반환

conditions, find

  • all: 모든 원소들이 조건을 만족하면 true, 아니면 false
  • any: 한 원소라도 조건을 만족하면 true, 아니면 false
  • none: 모든 원소가 조건에 따라 false를 반환하면 true, 아니면 false
  • first(firstOrNull): 조건을 만족하는 요소 중 첫번째 요소, 없으면 exception(없으면 null)
  • last(lastOrNull): 조건을 만족하는 요소 중 마지막 원소, 없으면 exception(없으면 null)
  • single(singleOrNull): true를 반환하는 원소가 딱 하나일 때 반환, 아니면 exception(없으면 null)
  • find == firstOrNull
  • findLast == lastOrNull
  • count: 조건에 만족하는 원소 개수 반환
  • indexOfFirst: 조건에 만족하는 첫 번째 원소의 인덱스 반환, 없으면 -1
  • indexOfLast: 조건에 만족하는 마지막 원소의 인덱스 반환, 없으면 -1

flat

  • flatMap: map 이후에 flatten
  • flatten: 리스트 안에 리스트가 있을 경우 한 리스트로 만들기

반복

  • forEach / forEachIndexed: 각 인덱스 값에 대해 람다식 수행, 반환x
  • onEach / onEachIndexed: 람다식 수행, 리스트 반환(식 수행한 결과 반영 x)

부분추출

  • take(n): 원소들 중 처음 n개의 원소만을 담은 리스트 반환
  • takeWhile: 원소들 중 false를 반환하기 전까지 원소 리스트 반환
  • takeLast(n): 원소들 중 마지막 n개의 원소만을 담은 리스트 반환
  • drop(n): 원소들 중 처음 n개의 원소를 제외한 리스트 반환
  • slice(범위): 인덱스에 해당하는 원소 리스트 반환

값 도출

  • fold(n) / foldIndexed: 시작값 n을 기준으로 순방향으로 람다식 수행
  • foldRight(n): fold를 역방향으로 수행
  • scan(n) / scanIndexed: fold를 수행하는 과정에서 나오는 결과를 리스트로 반환 (== runningFold)
  • random: 원소 중 무작위로 값 반환
  • reduce / reduceOrNull: 초기값이 없는 fold / collection에 원소가 없으면 null 반환

max, min, average

  • max / maxOrNull: 최대값 반환 / Collection이 비어있으면 null반환
  • maxBy / maxByOrNull: 람다식 수행하고 그 결과의 최대값에 해당하는 원소 반환
  • maxOf: 람다식 수행하고 그 결과의 최대값 반환
  • maxOfWith: maxOf에 comparator를 추가로 입력받아 큰 값 반환, 뒷 람다식에서 반환한 값에 대해 comparator를 수행
  • average: 평균 반환

그룹

  • groupBy: 특정 값을 키 값으로 가지는 LinkedHashMap 생성(value는 MutableList)
  • zip(list): 요소 순서대로 Pair로 묶은 리스트 반환, size가 작은 쪽 기준
  • zipWithNext: 리스트 순서대로 현재 인덱스를 first, 뒷 인덱스를 second인 Pair 리스트 반환, 람다식이 있으면 연산 수행해서 해당 값 저장
  • associate: Pair를 받아서 first가 key, second가 value가 되도록 LinkedHashMap 구성
  • associateBy: 값을 받아서 key가 해당 값, value가 해당 요소 객체가 됨
  • associateWith: associateBy에서 거꾸로 key가 해당 요소 객체, value가 해당 값
    • associate는 중복되는 key에 대해 뒤에 추가된 값만 남아있으므로 중요한 값을 리스트 뒤쪽으로 정렬할 필요가 있다
  • windowed(size, step, partialWindows): size개 만큼 순서대로 원소를 가지는 리스트 생성, step단계만큼 다음 인덱스, partialWindows가 true면 마지막 원소가 size보다 작아도 리스트 생성
  • chunked(size): size개 만큼 순서대로 자르기(==windowed(size, size, true))
  • partition: 람다식 결과에 따라 true인 리스트와 false인 리스트 페어 생성(Pair<List, List>)
  • joinToString: 리스트를 구분값이 있는 string으로 변환, prefit, postfix, separator등의 파라미터가 있음
  • plus: 원소 추가한 결과 반환, 실제 리스트에 반영x
  • minus: 원소 뺀 결과 반환, 실제 리스트에 반영x
  • subtract: 차집합, set반환
  • intersect: 교집합, set반환
  • union: 합집합, set반환
  • distinct: 중복 요소는 하나만 남기고 제거
  • distinctBy: 람다식 연산 결과에 따라 distinct하는데 결과는 원래 원소
  • none-local return vs local return
  • data class의 equals와 hashcode

0개의 댓글