【问题标题】:groupby and foreach in a list in KotlinKotlin 列表中的 groupby 和 foreach
【发布时间】:2020-04-19 16:22:28
【问题描述】:

希望有人能帮我告诉我以下代码有什么问题,因为我没有得到“Head First Kotlin”一书中的预期结果。

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

fun main() {
    val groceries = listOf(Grocery("Tomatoes", "Vegetable", "lb", 3.0, 3),
                            Grocery("Mushrooms", "Vegetables", "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))
    groceries.groupBy { it.category }.forEach {
        println(it.key)
        it.value.forEach { println("     ${it.name}") }
    }

我得到的结果如下:

Vegetable
     Tomatoes
Vegetables
     Mushrooms
Bakery
     Bagels
Pantry
     Olive Oil
Frozen
     Ice Cream

当我应该在书中得到:

Vegetable
     Tomatoes
     Mushrooms
Bakery
     Bagels
Pantry
     Olive Oil
Frozen
     Ice Cream

我不确定是我遗漏了什么还是因为我使用的是 kotlin 1.3。

非常感谢

【问题讨论】:

    标签: function kotlin lambda foreach group-by


    【解决方案1】:

    您应该从该输入列表中获得的结果就是您正在获得的结果,因此这里有两个选项:

    1. 书错了
    2. 您使用的列表与书中的列表不同

    Tomatoes 的类别是Vegetable,而Mushrooms 的类别是Vegetables

    它们是两个不同的类别。如果你想对它们进行分组,你应该使用相同的类别(VegetableVegetables),否则你应该实现一种更复杂的算法,支持在同一类别下的复数和单数名词分组。

    【讨论】:

    • 非常感谢。你说的对。 “蔬菜”和“蔬菜”的复数和单数是我的错误
    猜你喜欢
    • 2019-08-03
    • 2015-12-09
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多