Collection 연산
val list1 = listOf(1, 2, 3)
println(list1 + 4)
val list2 = listOf(4, 5, 6)
println(list1 + list2)
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
println(map - b)
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