Как вывести сумму элементов в списке в Kotlin
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Подходы к суммированию элементов списка в Kotlin
В Kotlin существует несколько удобных способов вычислить сумму элементов списка. Выбор конкретного метода зависит от типа данных в списке и требований к производительности.
Базовые методы для числовых списков
Для стандартных числовых типов Kotlin предоставляет встроенные функции:
fun main() {
// Список целых чисел
val intList = listOf(1, 2, 3, 4, 5)
// 1. Использование функции sum()
val sum1 = intList.sum()
println("Сумма через sum(): $sum1")
// 2. Использование sumOf() для преобразования
val sum2 = intList.sumOf { it }
println("Сумма через sumOf(): $sum2")
// Список чисел с плавающей точкой
val doubleList = listOf(1.5, 2.5, 3.5)
val doubleSum = doubleList.sum()
println("Сумма дробных: $doubleSum")
}
Универсальные подходы для любых типов данных
Использование fold()
Метод fold принимает начальное значение и функцию-аккумулятор:
fun main() {
val numbers = listOf(10, 20, 30, 40)
// fold с начальным значением 0
val sumFold = numbers.fold(0) { accumulator, element ->
accumulator + element
}
println("Сумма через fold(): $sumFold")
// Для строк или других типов
val stringNumbers = listOf("10", "20", "30")
val sumStrings = stringNumbers.fold(0) { acc, str ->
acc + str.toInt()
}
println("Сумма строк через fold(): $sumStrings")
}
Использование reduce()
reduce похож на fold, но не требует начального значения (использует первый элемент):
fun main() {
val numbers = listOf(5, 10, 15, 20)
val sumReduce = numbers.reduce { acc, element ->
acc + element
}
println("Сумма через reduce(): $sumReduce")
// Важно: reduce выбросит исключение на пустом списке!
val emptyList = emptyList<Int>()
val safeSum = emptyList.fold(0) { acc, el -> acc + el }
println("Безопасная сумма пустого списка: $safeSum")
}
Обработка сложных структур данных
Для списка объектов с числовыми полями:
data class Product(val name: String, val price: Double)
fun main() {
val products = listOf(
Product("Яблоки", 100.0),
Product("Бананы", 150.5),
Product("Апельсины", 200.75)
)
// Суммирование по полю price
val totalPrice = products.sumOf { it.price }
println("Общая стоимость: $totalPrice")
// Альтернатива с map и sum
val totalPriceAlt = products.map { it.price }.sum()
println("Альтернативный расчет: $totalPriceAlt")
}
Производительность и рекомендации
sum()— наиболее эффективный способ для стандартных числовых типовsumOf()— предпочтителен при необходимости преобразования элементовfold()— универсальное решение с контролем начального значенияreduce()— подходит для непустых коллекций без явного начального значения
Расширенные сценарии
fun main() {
// Фильтрация перед суммированием
val mixedList = listOf(1, 2, 3, 4, 5, 6)
val evenSum = mixedList.filter { it % 2 == 0 }.sum()
println("Сумма четных чисел: $evenSum")
// Кастомная агрегация
val customSum = mixedList.fold(0 to 0) { (posSum, negSum), element ->
if (element > 0) (posSum + element to negSum)
else (posSum to negSum + element)
}
println("Сумма положительных: ${customSum.first}, отрицательных: ${customSum.second}")
}
Заключение
Kotlin предлагает богатый набор инструментов для суммирования элементов списка. Для простых числовых списков используйте sum(), для преобразований — sumOf(), а для максимальной гибкости — fold(). Все эти методы являются inline-функциями, что обеспечивает эффективность выполнения без накладных расходов на вызов функций.