Я просматриваю документацию для функции Kotlin fold и испытываю трудности с пониманием происходящего. Пример, который они предоставляют, выглядит следующим образом:
val fruits = listOf("apple", "apricot", "banana", "blueberry", "cherry", "coconut")
// collect only even length Strings
val evenFruits = fruits.groupingBy { it.first() }
.fold(listOf<String>()) { acc, e -> if (e.length % 2 == 0) acc + e else acc }
println(evenFruits) // {a=[], b=[banana], c=[cherry]}
Они говорят, что в качестве аргумента должна быть только одна «функция операции».
.fold(listOf<String>()) { acc, e -> if (e.length % 2 == 0) acc + e else acc }
Однако, кроме лямбды, они также имеют часть (listOf<String>())
. Хотя отсутствие скобок вокруг аргументов в некоторых вызовах функций иногда смущает меня, я представляю, что это не может быть вызов функции сам по себе. Требуется ли для функции Kotlin fold указание типа или указание типа лямбды? Если я избавлюсь от этого фрагмента кода, он сломается. Я был почти уверен, что единственный способ указать тип - это анонимные функции с возвращаемым типом, а не лямбда-выражения, так что я действительно не слишком уверен, что здесь происходит. Я новичок в Kotlin, поэтому любые объяснения относительно того, что означает этот синтаксис и как работает функция сгиба, будут оценены.
Вот ссылка на документацию: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/fold.html