#21 Kotlin Koans Collections/Filter map 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans Collections/Filter map의 해설 기사입니다.

Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.

다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!

일단 각자 도전하고 나서 볼 수 있다고 생각합니다

2-1 map()



map() : 호출자 컬렉션의 요소를 List 형태로 반환한다. 인수로서 건네주는 함수(transform function)의 룰에 따라 List의 내용이 정해진다.

kotlin koans의 예를 인용합니다.
val numbers = listOf(1, -1, 2)
numbers.map { it * it } == listOf(1, 1, 4)
val numbers = listOf(1,-1,2) 의 부분으로 List를 생성하고 있습니다.

이 List가 map()을 호출해 람다 식 {it * it} 를 건네주고 있으므로, 호출 원래에는

각 요소가 제곱이 되었다( 1は1 , -1は1 , 2は4 가 됩니다.) List 가 돌아옵니다.

2-2 filter()



filter() : 호출자 컬렉션의 요소 중 인수로 전달하는 함수(predicate)의 조건을 만족하는 요소만의 List를 반환한다.

kotlin koans의 예를 인용합니다.
val numbers = listOf(1, -1, 2)
numbers.filter { it > 0 } == listOf(1, 2)
val numbers = listOf(1,-1,2) 의 부분으로 List를 생성하고 있습니다.

이 List 가 filter() 를 호출해 람다 식 { it > 0 } 를 건네주어, 이 조건을 채우는 요소 (1, 2)가 요소로서 포함되는 List 를 돌려줍니다.

3 Collections/Filter map 해설



Kotlin Koans Collections/Filter map 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.

본문과 코드를 살펴보자.

Implement extension functions Shop.getCitiesCustomersAreFrom() and Shop.getCustomersFrom() using functions map and filter.
val numbers = listOf(1, -1, 2)
numbers.filter { it > 0 } == listOf(1, 2)
numbers.map { it * it } == listOf(1, 1, 4)


Filter_map
// Return the set of cities the customers are from
fun Shop.getCitiesCustomersAreFrom(): Set<City> = TODO()

// Return a list of the customers who live in the given city
fun Shop.getCustomersFrom(city: City): List<Customer> = TODO()

getCitiesCustomersAreFrom() 은 고객(Customer) 출신의 도시(city)의 set를 반환하도록 구현합니다.

이제 각 인스턴스의 속성을 정리합시다.

Shop:name(String형), customers(List< Customer >형)

Customer : name (String 형), city (City 형), orders (List )

Shop이 getCitiesCustomersAreFrom()을 호출하면 customers 속성의 요소(Customer) city를 map()을 사용하여 List로 반환합니다.

List를 Set로 변환하기 위해 toSet()을 사용합니다.

따라서 다음과 같은 구현이 됩니다.

Filter_map
fun Shop.getCitiesCustomersAreFrom(): Set<City> = customers.map{ it.city }.toSet()

둘째,
Shop.getCustomersFrom(city: City)은 인수로 전달된 city 출신 고객(Customer)의 List를 반환합니다.

getCustomersFrom(city: City)을 호출할 때, 임의의 값이 대입된 city를 건네주어, Shop의 프로퍼티 customers가 가지는 요소(Customer)의 city에 대해 생각합니다.
Customers가 filter()를 호출하여 Customers의 각 요소(Customer)가 인수로 전달하는 함수의 조건을 충족하는지 여부를 결정하고, 만족하는 것만의 List를 반환하도록 구현합니다.
충족해야 할 조건은 Customer의 city 값과 getCustomersFrom(city: City)이 인수로 받은 city 값이 일치하는지입니다.

따라서 다음과 같은 구현이 됩니다.

Filter_map
fun Shop.getCustomersFrom(city: City): List<Customer> = customers.filter{ it.city == city }

4 마지막으로



다음은 Kotlin Koans Collections/All Any and other predicates의 해설을합니다.

좋은 웹페이지 즐겨찾기