kotlin: синтаксис для 2 лямбда-параметра

Я новичок в kotlin. У меня есть класс java с 2 перегруженными методами. Один принимает одну функцию, другой принимает два

mapToEntry(Function<? super T, ? extends V> valueMapper) 

а также

 mapToEntry(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends V> valueMapper) 

nowm в kotlin, я пытаюсь вызвать версию с двумя параметрами (как в java):

 myClass.mapToEntry(r -> r, r -> r) 

но я получаю ошибку компиляции.

Kotlin: Неожиданные жетоны (используйте ';' для разделения выражений в одной строке)

какой правильный синтаксис?

В Котлине лямбда-выражения всегда окружены фигурными фигурными скобками, поэтому

 myClass.mapToEntry({ r -> r }, { r -> r }) 

См. Синтаксис выражения ярлыка

Вы были близки, вам просто нужно обернуть их фигурными скобами …

 myClass.mapToEntry({r -> r}, {r -> r}) 

Кроме того, вы можете воспользоваться тем, что Kotlin определяет it как единственный параметр по умолчанию для лямбда. Предполагая, что ключ и значение являются строками, и вы хотите изменить значение ключа и в верхнем регистре значения (просто составляя пример):

 myClass.mapToEntry( { it.reversed() }, { it.toUpperCase() }) 

Основной синтаксис : выражения лямбда всегда заключены в фигурные скобки:

 val sum = { x: Int, y: Int -> x + y } 

пример

Давайте определим функцию, похожую на вашу в Котлине:

 fun <T, K> mapToEntry(f1: (T) -> K, f2: (T) -> K) {} 

Первое возможно прямо, мы просто передаем два лямбда следующим образом:

 mapToEntry<String, Int>({ it.length }, { it.length / 2 }) 

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

 mapToEntry<String, Int>({ it.length }) { it.length / 2 } 

Первая лямбда проходит внутри скобок, а вторая – нет.