이 시나리오에서 여러 도넛을 한 번에 사는 경우에는 combine 함수가 효율적이지 않다. 이를 위해서는 다음 예제처럼 buyDonut 함수를 buyDonuts(n: Int, creditCard: CreditCard)로 바꿀 수도 있다. 하지만 그렇게 하려면 새로운 Purchase 클래스를 정의해야 한다. 다른 방법으로 여러분이 Pair<Donut, Payment>를 사용하기로 택했다면 그 타입을 Pair<List<Donut>, Payment>으로 바꿔야만 한다.
예제 1-4 여러 도넛을 한꺼번에 사기
// class Purchase(val donuts: List<Donut>, val payment: Payment)로
// Purchase 정의를 변경했음
fun buyDonuts(quantity: Int = 1, creditCard: CreditCard): Purchase =
Purchase(List(quantity) {
Donut()
}, Payment(creditCard, Donut.price * quantity))
여기서 List(quantity) { Donut() }은 {Donut() }이라는 함수에 0부터 quantity - 1까지 값을 적용하면서 quantity 길이의 리스트를 만든다. { Donut() }이라는 함수는 다음과 같고,
{ index -> Donut() }
이는 또한 다음과 같다.
{ _ -> Donut() }