## 2019年5月5日日曜日

### Kotlin - built-in higher-order functions - Power Up Your Code - filter, sumByDouble, map, forEach, groupBy, filterNot

Head First Kotlin: A Brain-Friendly Guide (Dawn Griffiths(著)、David Griffiths(著)、O'Reilly Media)のChapter 12(built-in higher-order functions - Power Up Your Code)、Sharpen your pencil(390)の解答を求めてみる。

コード

```data class Grocery(
val name: String, val category: String,
val unit: String, val unitPrice: Double,
val quantity: Int
)

val groceries = listOf(
Grocery("Tomatoes", "Vegetable", "lb", 3.0, 3),
Grocery("Mushrooms", "Vegetable", "lb", 4.0, 1),
Grocery("Bagels", "Bakery", "Pack", 1.5, 2),
Grocery("Olive oil", "Pantry", "Bottle", 6.0, 1),
Grocery("Ice cream", "Frozen", "Pack", 3.0, 2)
)

fun main() {
println("1.")
println(
groceries
.filter { it.category == "Vegetable" }
.sumByDouble { it.unitPrice * it.quantity }
)
println("2.")
val names = groceries
.filter { it.unitPrice * it.quantity < 5.0 }
.map { it.name }
names.forEach { println(it) }

println("3.")
groceries
.groupBy { it.category }
.forEach {
println("\${it.key}: \${it.value.sumByDouble { it.unitPrice * it.quantity }}")
}

println("4.")
groceries
.filterNot { it.unit == "Bottle" }
.groupBy { it.unit }
.forEach {
println(it.key)
it.value.forEach {
println("\t\${it.name}")
}
}
}```

```1.
13.0
2.
Mushrooms
Bagels
3.
Vegetable: 13.0
Bakery: 3.0
Pantry: 6.0
Frozen: 6.0
4.
lb
Tomatoes
Mushrooms
Pack
Bagels
Ice cream

Process finished with exit code 0
```