groupby и foreach в списке в Kotlin - PullRequest
       11

groupby и foreach в списке в Kotlin

0 голосов
/ 19 апреля 2020

Надеюсь, что кто-то может помочь мне рассказать, что не так с приведенным ниже кодом, потому что я не получаю ожидаемого результата, как в книге "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.

Большое спасибо

1 Ответ

1 голос
/ 19 апреля 2020

Результат, который вы должны получить из этого списка ввода, - это тот, который вы получаете, поэтому здесь есть два варианта:

  1. книга неверна
  2. вы используете другой список в качестве входных данных, чем в книге

Категория Tomatoes равна Vegetable, а категория Mushrooms равна Vegetables.

Это две разные категории. Если вы хотите сгруппировать их, вы должны использовать одну и ту же категорию (обе Vegetable или обе Vegetables), в противном случае вам следует реализовать более сложный алгоритм, который поддерживает группировку по множественному и единственному существительным в одной категории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...