#23 Kotlin Koans Collections/FlatMap 해설
1 소개
Kotlin 공식 레퍼런스의 Kotlin Koans Collections/FlatMap의 해설 기사입니다.
Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.
다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!
일단 각자 도전하고 나서 볼 수 있다고 생각합니다
2 flatMap()
flatMap() : 호출자 컬렉션의 요소를 연결하여 List로 반환합니다.
val result = listOf("abc", "12").flatMap { it.toCharList() }
result == listOf('a', 'b', 'c', '1', '2')
위의 예에서는 abc
와 12
라는 요소를 가진 List 가 flatMap() 에 람다 식을 건네주고, 반환값을 연결해 List 를 생성하고 있습니다.
3 Collections/FlatMap 해설
Kotlin Koans Collections/FlatMap 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
본문과 코드를 살펴보자.
Implement Customer.getOrderedProducts() and Shop.getAllOrderedProducts() using flatMap.
val result = listOf("abc", "12").flatMap { it.toCharList() }
result == listOf('a', 'b', 'c', '1', '2')
FlatMap// Return all products this customer has ordered
val Customer.orderedProducts: Set<Product> get() {
TODO()
}
// Return all products that were ordered by at least one customer
val Shop.allOrderedProducts: Set<Product> get() {
TODO()
}
먼저, Customer.orderedProducts
를 참조했을 때의 TODO() 의 구현을 생각해 봅시다.
각 클래스의 속성은 다음과 같습니다.
Customer 클래스: name(String형), city(City형), orders(List< Order >형)
Order 클래스: products(List< Product >형), isDelivered(Boolean형)
Customer.orderedProducts를 참조할 때 Customer 인스턴스가 가진 orders 속성의 각 요소(Order)에 대한 제품 집합을 반환하도록 구현합니다.
즉, Customer→orders(Order의 List)→products(Product의 List)의 순서로 속성을 참조하고 있습니다.
따라서 다음과 같은 코드가 됩니다.
FlatMapval Customer.orderedProducts: Set<Product> get() {
return orders.flatMap{it.products}.toSet()
}
다음으로, Shop.allOrderedProducts
를 참조했을 때의 TODO() 의 구현을 생각해 봅시다.
각 클래스의 속성은 다음과 같습니다.
Shop 클래스: name(String형), customers(List< Customer >형)
Customer 클래스: name(String형), city(City형), orders(List< Order >형)
Order 클래스: products(List< Product >형), isDelivered(Boolean형)
Shop.allOrderedProducts를 참조했을 때, Shop형 인스턴스의 customers의 각 요소(Customer)의 orders의 각 요소(Order)의 products의 Set를 돌려주도록(듯이) 구현합니다.
즉, Shop→customers(Customer의 List)→orders(Order의 List)→products(Product의 List)의 순서로 속성을 참조하고 있습니다.
굵은 선 부분의 참조 관계는 Customer.orderedProducts와 유사하므로이를 사용합니다.
따라서 다음과 같은 구현이 됩니다.
FlatMap return customers.flatMap{it.orderedProducts}.toSet()
4 마지막으로
다음은 Kotlin Koans Collections/Max min의 해설을합니다.
Reference
이 문제에 관하여(#23 Kotlin Koans Collections/FlatMap 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/91ca5a3ffcfcc505a9f8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
flatMap() : 호출자 컬렉션의 요소를 연결하여 List로 반환합니다.
val result = listOf("abc", "12").flatMap { it.toCharList() }
result == listOf('a', 'b', 'c', '1', '2')
위의 예에서는
abc
와 12
라는 요소를 가진 List 가 flatMap() 에 람다 식을 건네주고, 반환값을 연결해 List 를 생성하고 있습니다.3 Collections/FlatMap 해설
Kotlin Koans Collections/FlatMap 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
본문과 코드를 살펴보자.
Implement Customer.getOrderedProducts() and Shop.getAllOrderedProducts() using flatMap.
val result = listOf("abc", "12").flatMap { it.toCharList() }
result == listOf('a', 'b', 'c', '1', '2')
FlatMap// Return all products this customer has ordered
val Customer.orderedProducts: Set<Product> get() {
TODO()
}
// Return all products that were ordered by at least one customer
val Shop.allOrderedProducts: Set<Product> get() {
TODO()
}
먼저, Customer.orderedProducts
를 참조했을 때의 TODO() 의 구현을 생각해 봅시다.
각 클래스의 속성은 다음과 같습니다.
Customer 클래스: name(String형), city(City형), orders(List< Order >형)
Order 클래스: products(List< Product >형), isDelivered(Boolean형)
Customer.orderedProducts를 참조할 때 Customer 인스턴스가 가진 orders 속성의 각 요소(Order)에 대한 제품 집합을 반환하도록 구현합니다.
즉, Customer→orders(Order의 List)→products(Product의 List)의 순서로 속성을 참조하고 있습니다.
따라서 다음과 같은 코드가 됩니다.
FlatMapval Customer.orderedProducts: Set<Product> get() {
return orders.flatMap{it.products}.toSet()
}
다음으로, Shop.allOrderedProducts
를 참조했을 때의 TODO() 의 구현을 생각해 봅시다.
각 클래스의 속성은 다음과 같습니다.
Shop 클래스: name(String형), customers(List< Customer >형)
Customer 클래스: name(String형), city(City형), orders(List< Order >형)
Order 클래스: products(List< Product >형), isDelivered(Boolean형)
Shop.allOrderedProducts를 참조했을 때, Shop형 인스턴스의 customers의 각 요소(Customer)의 orders의 각 요소(Order)의 products의 Set를 돌려주도록(듯이) 구현합니다.
즉, Shop→customers(Customer의 List)→orders(Order의 List)→products(Product의 List)의 순서로 속성을 참조하고 있습니다.
굵은 선 부분의 참조 관계는 Customer.orderedProducts와 유사하므로이를 사용합니다.
따라서 다음과 같은 구현이 됩니다.
FlatMap return customers.flatMap{it.orderedProducts}.toSet()
4 마지막으로
다음은 Kotlin Koans Collections/Max min의 해설을합니다.
Reference
이 문제에 관하여(#23 Kotlin Koans Collections/FlatMap 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/91ca5a3ffcfcc505a9f8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
val result = listOf("abc", "12").flatMap { it.toCharList() }
result == listOf('a', 'b', 'c', '1', '2')
// Return all products this customer has ordered
val Customer.orderedProducts: Set<Product> get() {
TODO()
}
// Return all products that were ordered by at least one customer
val Shop.allOrderedProducts: Set<Product> get() {
TODO()
}
val Customer.orderedProducts: Set<Product> get() {
return orders.flatMap{it.products}.toSet()
}
return customers.flatMap{it.orderedProducts}.toSet()
다음은 Kotlin Koans Collections/Max min의 해설을합니다.
Reference
이 문제에 관하여(#23 Kotlin Koans Collections/FlatMap 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/G-o/items/91ca5a3ffcfcc505a9f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)