1. filter와 map
- filter 함수는 컬렉션을 이터레이션하면서 주어진 람다에 각 원소를 넘겨서 람다가 true를 반환하는 원소만 모은다.
>>> val list = listOf(1,2,3,4)
>>> println(list.filter { it%2 == 0 })
[2,4]
- map 함수는 주어진 람다를 컬렉션의 각 원소에 적용한 결과를 모아서 새 컬렉션을 만든다.
>>>val list = listOf(1,2,3,4)
>>>println(list.map{ it*it })
[1,4,9,16]
2. all, any, count, find
- 컬렉션의 모든 원소가 어떤 조건을 만족하는지 판단하는 연산이다.
val canBeInClub27 = {p:Person -> p.age<=27}
>>> val people = listOf(Person("Alice", 27), Person("Bob", 31))
>>> println(people.all(canBeInClub27)) //모든 원소가 이 술어를 만족하는지
false
>>>println(people.any(canBeInClub27)) //이 술어를 만족하는 원소가 하나라도 있는지
true
>>println(people.count(canBeInClub27)) //술어를 만족하는 원소의 개수
1
>>println(people.find(canBeInClub27)) //조건을 만족하는 원소가 있다면, 처음 확인된 원소 반환. 없으면 null 반환.
Person(name=Alice, age=27)
3. groupBy
- 리스트를 여러 그룹으로 이루어진 맵으로 변경해준다.
>>>val people = listOf(Person("Alice",31),
...Person("Bob", 29), Person("Carol", 31))
>>> println(people.groupBy{it.age})
[29=[Person(name=Bob, age=29)], 31=[Person(name=Alice, age=31), Person(name=Carol, age=31)]}
4. flatMap과 flatten
- flatMap 함수는 인자로 주어진 람다를 컬렉션의 모든 객체에 적용하고, 람다를 적용한 결과 얻어지는 여러 리스트를 한 리스트로 한데 모은다.
>>>val books = listOf(Book("book1", listOf("author1")), Book("book2", listOf("author2")), Book("book3", listOf("author2", "author3")))
>>>println(books.flatMap{ it.authors }.toSet())
[author1, author2, author3]
flatMap 함수는 모든 책의 작가를 평평한 리스트 하나로 모으고, toSet은 결과 리스트에서 중복을 없애 집합으로 만든다.
- 리스트의 리스트가 있는데 모든 중첩된 리스트의 우너소를 한 리스트로 모아야 한다면 flatMap을 사용할 수 있다. 하지만 특별히 변환해야 할 내용이 없다면 flatten 함수를 이용해 리스트의 리스트를 평평하게 펼치기만 하면 된다.
'Dev Book > Kotlin IN ACTION' 카테고리의 다른 글
CH5(5.5). 수신 객체 지정 람다 (0) | 2022.01.08 |
---|---|
CH5(5.3). 지연 계산 컬렉션 연산 (0) | 2022.01.02 |
CH5(5.1). 람다 식과 멤버 참조 (0) | 2021.12.05 |
CH4(4.2). 뻔하지 않은 생성자와 프로퍼티를 갖는 클래스 (0) | 2021.11.27 |
CH4(4.3~4.4). 데이터 클래스와 클래스 위임, object 키워드 (0) | 2021.11.27 |