문제

Learn about mapping and filtering a collection.

Implement the following extension functions using the map and filter functions:

  • Find all the different cities the customers are from
  • Find the customers living in a given city
val numbers = listOf(1, -1, 2)
numbers.filter { it > 0 } == listOf(1, 2)
numbers.map { it * it } == listOf(1, 1, 4)

Task.kt

// Find all the different cities the customers are from
fun Shop.getCustomerCities(): Set<City> =
        TODO()

// Find the customers living in a given city
fun Shop.getCustomersFrom(city: City): List<Customer> =
        TODO()

Shop.kt

data class Shop(val name: String, val customers: List<Customer>)

data class Customer(val name: String, val city: City, val orders: List<Order>) {
    override fun toString() = "$name from ${city.name}"
}

data class Order(val products: List<Product>, val isDelivered: Boolean)

data class Product(val name: String, val price: Double) {
    override fun toString() = "'$name' for $price"
}

data class City(val name: String) {
    override fun toString() = name
}

// Find all the different cities the customers are from
fun Shop.getCustomerCities(): Set<City> =
        customers.map { it.city }.toSet()

// Find the customers living in a given city
fun Shop.getCustomersFrom(city: City): List<Customer> =
        customers.filter { it.city.equals(city) }

풀이

컬렉션 API인 mapfilter 함수를 사용하여 컬렉션을 변환하고 필터링하는 방법에 대한 문제이다.

Collection API

map 함수 : 각 원소를 원하는 형태로 변환한 결과를 모아서 새로운 컬렉션 반환

filter 함수 : 주어진 조건문에 만족하는 원소만으로 이루어진 새로운 컬렉션 반환

요구사항

  1. 고객이 있는 다른 모든 도시들 찾기
  2. 특정 도시에 거주하는 고객 찾기

요구사항 1

  • customers.map { it.city }: 고객 리스트(customers)에서 각 고객의 도시(city)를 추출하여 새로운 리스트를 생성한다.
  • .toSet(): 생성한 리스트를 Set으로 변환하여 중복을 제거하고, 최종적으로 서로 다른 도시들의 집합을 반환한다.

요구사항 2

  • 특정 도시(City)에 거주하는 고객들을 필터링하기 위해 filter 함수를 사용한다.
  • filter 함수를 통해서 주어진 조건에 맞는 요소들만 포함하는 새로운 리스트를 반환한다.
profile
개발하는 다람쥐

0개의 댓글