컬렉션 함수형 API
filter와 map
- filter
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter.html
컬렉션에서 주어진 람다가 true를 반환하는 element를 추출하는 함수이다.
- map
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html
컬렉션에서 원하는 다른 형태의 element의 조합을 만들어 낼 수 있다.
- filter와 map을 연결(join)하여 원하는 컬렉션을 추출 할수도 있다.
all, any, count, find
-
all
컬렉션의 모든 element가 특정 조건을 만족한다면 true, 한개라도 만족하지 않는 것이 있다면 false를 반환한다.
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/all.html -
any
특정 조건을 만족하는 element가 한개라도 존재한다면 true, 아니라면 false를 반환한다.
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/any.html
!all(condition)과 any(!condition)
!all(condition) 과 any(!condition)의 결과는 같다. 반대로 !any(condition)과 all(!condition)도 같다.
가독성을 위해 !all 이나 !any와 같은 함수를 쓰기 보다는 함수안의 조건을 변경하여 사용하는 것을 추천한다.(지은이 왈)
-
find
특정 조건을 만족하는 첫번째 element를 반환한다.
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/find.html -
count
결과 컬렉션의 element의 count수를 반환한다.
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/count.html
함수를 적재적소에 사용하라: count와 size
컬렉션을 필터링한 결과의 크기를 가져 올때 .size보다는 count함수를 이용하는 편이 좋다.
예) people.fileter(canBelInClub27).size
lazy 연산과 관련된 것 같은데(개인적인 추측) size를 이용하는 경우 실질적인 collection 결과가 필요하므로
size를 구하기전 조건에 맞는 collection을 만들게 된다.
하지만 count함수를 이용할 경우 최종 조건에 맞는 element의 수를 추척할 뿐 만족하는 요소들을 따로 저장하지 않는다.
groupBy
groupBy는 컬렉션의 요소들을 어떤 특성에 따라 분류하고자 할때 사용한다.
조건(람다식)을 파라미터로 넘기면 그에 따른 collection을 분리하여 map으로 반환해 준다.
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html
flatMap, flatten
- flatMap
개별 element가 지니고 있는 list(or Array)의 요소들을 1개의 리스트로 병합하여 반환한다.
글을 봐서는 이해가 안되니 예제와 그림으로..
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/flat-map.html
- flatten
개별 element가 list(or Array)자체인 경우 flatten을 이용해 1개의 리스트로 병합할 수 있다.
Ref. : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/flatten.html