#24 Kotlin Koans Collections/Max min 해설

1 소개



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

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

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

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

2 max()/min()/maxBy()/minBy()



max() : 컬렉션의 요소의 최대치를 돌려준다.

min() : 컬렉션의 요소의 최소치를 돌려줍니다.

maxBy() : 컬렉션이 건네주는 인수(selector)로서 건네주는 조건식의 반환값 중, 최대의 것을 돌려준다.

minBy() : 컬렉션이 건네주는 인수(selector)로서 건네주는 조건식의 반환값 중, 최소의 것을 돌려준다.

(모든 함수는 Kotlin1.4 에서 Deprecated로 되어 있습니다(2020년 8월 17일부터). 각각 대체 함수가 준비되어 있으므로 한번 조사해 보세요.)

3 Collections/Max min의 해설



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

본문과 코드를 살펴보자.

Implement Shop.getCustomerWithMaximumNumberOfOrders() and Customer.getMostExpensiveOrderedProduct() using max, min, maxBy, or minBy.
listOf(1, 42, 4).max() == 42
listOf("a", "ab").minBy { it.length } == "a"

Max_min
// Return a customer whose order count is the highest among all customers
fun Shop.getCustomerWithMaximumNumberOfOrders(): Customer? = TODO()

// Return the most expensive product which has been ordered
fun Customer.getMostExpensiveOrderedProduct(): Product? = TODO()

Shop.getCustomerWithMaximumNumberOfOrders(): Customer? 에서 생각해 봅시다.

각 클래스의 속성은 다음과 같습니다.

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

Customer 클래스: name(String형), city(City형), orders(List< Order >형)

Order 클래스: products(List< Product >형), isDelivered(Boolean형)

Shop의 속성 customers의 orders(Order를 요소로 한다) 중 요소수가 최대의 것을 돌려주도록(듯이) 구현합니다.

요소 수를 나타내려면 컬렉션 클래스 속성 크기을 사용합니다.

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

Max_min
fun Shop.getCustomerWithMaximumNumberOfOrders(): Customer? = customers.maxBy{it.orders.size}  



다음으로 Customer.getMostExpensiveOrderedProduct(): Product? 에 대해 생각해 봅시다.

각 클래스의 속성은 다음과 같습니다.

Customer 클래스: name(String형), city(City형), orders(List< Order >형)

Order 클래스: products(List< Product >형), isDelivered(Boolean형)

Product 클래스: name(String형), price(Double형)

Customer 프로퍼티 orders(Order 인스턴스의 List)의 products(Product 인스턴스의 List) 중 최대의 price를 가지는 것을 돌려주도록(듯이) 구현합니다.

먼저 flatMap() 를 사용하여 Customer에서 구입한 제품을 추출합니다.

Max_min
fun Customer.getMostExpensiveOrderedProduct(): Product? = orders.flatMap{it.products}

그 중에서, maxBy() 를 이용해 최대의 price를 가지는 것을 돌려주도록(듯이) 구현합니다.

따라서 최종 코드는 다음과 같습니다.

Max_min
fun Customer.getMostExpensiveOrderedProduct(): Product? = orders.flatMap{it.products}.maxBy{it.price}

4 마지막으로



다음은 Kotlin Koans Collections/Sort의 해설을합니다.

좋은 웹페이지 즐겨찾기