Intereting Posts
Kotlin: Как дочерний класс может использовать функцию расширения родителя в вызове супер-конструктора? Ошибка Firebase в приложении для Android MailCore: результат htmlRenderingOperation всегда равен нулю Ошибка базы данных комнаты с классом данных Kotlin Почему Котлин держит MetaData в файле класса Kotlin? ошибка при использовании «npm start» с приложением, созданным «create-react-kotlin-app» Dokka использует полностью квалифицированные имена классов Обработчик аннотации Kotlin-Kapt не работает с maven Получить дату datepicker на Kotlin TornadoFX Что делает ключевое слово «по» в Котлине? Функция Kotlin Call Javascript в Android без webView Могу ли я использовать инъекцию кинжала 2 в Котлин? Объединение / объединение классов данных в Котлин Почему интеллектуальное сканирование сбрасывается для значения NULL после установки значения и проверки, является ли оно нулевым? Kotlin не может получить доступ к kotlin.jvm.functions.Function1 при вызове функции kotlin с java lambda

Как сделать сумму элементов для нескольких списков в kotlin

Я хочу объединить два списка предметов по сумме элементов по количеству. определение объекта: Item (name:String, count:Long}

 var list1 : MutableList<Item> = //From API 1 call var list2 : MutableList<Item>= //From API 2 call 

Пример:

 Item 1: [{"pen",2}, {"pencil", 3}] Item 2: [{"pen",6}, {"chair", 2}] 

Выход:

 Final list: [{"pen",8}, {"pencil", 3}, {"chair", 2}] 

Как я могу достичь в kotlin, используя любую встроенную функцию коллекции?

Solutions Collecting From Web of "Как сделать сумму элементов для нескольких списков в kotlin"

Вам нужно будет использовать groupBy и reduce :

 val itemsCount = (list1 + list2) // concat lists .groupBy { it.name } // group items by name .values // take list of values .map { // for each list it.reduce { // accumulate counts acc, item -> Item(item.name, acc.count + item.count) } } 

Вы можете добавлять списки, группы, а затем значения карты:

 val l = list1 + list2 val r = l.groupBy { it.name } //Map<String, List<Item>> .mapValues { it.value.map { it.count }.sum() } //Map<String, Long> .toList() //List<Pair<String, Long>> .map { p -> Item(p.first, p.second) }