for (item in Collection)
이것처럼 우리는 컬렉션을 반복문을 통해 하나하나 꺼내어 사용했지만 함수를 통해 더 효율적으로 꺼낼 수 있다.
: list나 set, map과 같은 컬렉션 또는 배열에 일반 함수 또는 람다 함수 형태를 사용하여 for문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 여러가지 함수를 지칭
collection.forEach {
println(it)
}
중괄호 안에서 컬렉션에 포함된 모든 아이템을 it이라는 변수로 순서대로 참조 가능
collection.filter {
it < 4
}
중괄호 안에서 it의 조건을 걸면 조건에 맞는 객체만 다시 컬렉션 아이템으로 만들어서 반환
collection.map {
it * 2
}
중괄호 안에 it의 수식을 적용하여 값을 변경하면 그 값을 컬렉션으로 만들어 반환
collection.any {it == 0} // 하나라도 조건에 맞으면 true
collection.all {it == 0} // 모두 조건에 맞으면 true
collection.none {it == 0} // 하나도 조건에 맞지 않으면 true
중괄호 안에 조건을 걸어 각 함수의 기능에 맞게 true, false 반환
collection.first { it > 3 }
collection.last { it > 3 }
first는 람다 함수 형태로 중괄호 안에 it에 대해 조건을 걸어주면 조건에 맞는 첫 아이템을 반환
last는 그 반대인 조건에 맞는 마지막 아이템 반환
collection.count { it > 7 }
원래는 count()인 일반 함수 사용 시 모든 개수를 반환하지만 람다 함수로 조건을 걸어 조건에 맞는 개수를 반환 해준다.

forEach를 통해 for문과 같이 나열
filter로 각 문자열의 앞글자 "김"인 것을 반환
map을 통해 "이름 : "이라는 문자열과 함께 반환
any로 김지연이라는 사람이 없어서 false
all로 모두 이름의 길이가 3이기에 true
none으로 모두 이름 성씨가 "이"가 아니기에 true
김으로 시작하는 첫 아이템인 김지수
김으로 시작하는 마지막 아이템인 김지우
"지"라는 문자가 들어간 문자열 개수는 2로 출력하게 된다.
: 객체(아이템)에서 key를 추출하여 map으로 변환하는 함수

이미지와 같이 이름과 태어난 년도 정보가 들어간 각 객체에서 이름을 key로 한다면
associateBy에서는 key값인 이름을 가져와서 map으로 반환해준다.
: key가 같은 아이템끼리 배열로 묶어 map으로 만드는 함수

특정한 값을 키로 지정하여 해당 값을 가진 객체끼리 묶은 배열을 value로 하는 map을 만들어주는 기능
: 아이템에 조건을 걸어 2개의 컬렉션으로 나누어줌


아이템에 조건을 걸어 true인지 false인지에 따라 2개의 컬렉션으로 나누어 준다.
이 컬렉션들은 객체를 담을 수 있는 Pair라는 클래스 객체로 반환되므로 각각의 컬렉션을 first, second로 참조하여 사용하면 된다.
또는 변수 2개를 설정하면 받아도 된다.

보는 바와 같이 associateBy로 인해 key값과 해당하는 컬렉션에 대해 key와 value로 나타내준다.
groupBy를 통해 key값이 같은 것 끼리 묶어서 보여주는 것을 알 수 있다.
또한 partition으로 1998보다 높은 key들은 over98로 낮은 것들은 under98로 들어가서 각 변수를 출력하면 조건에 맞게 반환되는 것을 알 수 있다.
: 아이템마다 만들어진 컬렉션을 이를 합쳐서 하나의 컬렉션으로 반환하는 함수

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

인덱스 위치에 아이템 있으면 아이템 반환

없다면 50을 반환
: 컬렉션 2개의 아이템을 1:1로 매칭하여 새 컬렉션 생성

2개의 컬렉션이 있다면 1:1로

Pair 클래스에 객체로 만들어 리스트에 넣어 반환해준다.
결과 List의 아이템의 개수는 더 작은 컬렉션을 따라가게 된다.

따라서 예제를 보면 flatMap을 통해 각 인덱스의 10곱한 값과 더한 값을 리스트로 나열하여 보여주고,
getOrElse로 해당 인덱스에 아이템 유무에 따라 디폴트값과 해당 값을 반환한다.
마지막으로 zip을 통해 Pair 클래스로 리스트에 넣어 반환해주는 것을 알 수 있다.