Kotlin lambda con varios parameters

Estoy un poco confundido acerca de la expresión de kotlin lambda. No puedo encontrar una respuesta adecuada.

En Java, puedo configurar un oyente con estos parameters:

myObject.setListener(new MyListener() { @Override public boolean doSmth(int pos, int value) { switch(..) { .... } } }) 

Con lambda:

  myObject.setListener((p1, p2) -> { switch(..) { .... } }) 

En Kotlin puedo hacer algo así:

 myObject.setListener{p1, p2 -> return@setListener false} 

o

 myObject.setListener{{p1, p2 -> if (p1) { return@setListener true } else { return@setListener false } }} 

Pero es realmente feo. ¿Hay alguna manera de hacerlo más fácil? De lo que puedo usar smth así:

 myObject.setListener{p1, p2 -> myFunc(p1, p2)} 

Pero, ¿qué pasa si quiero poner mi lógica en ese oyente (podría ser complejo, no solo if else return )?

En tu primer ejemplo, simplemente elimina return@setListener

 myObject.setListener{p1, p2 -> false} 

En su segundo ejemplo, debe tener cuidado:

  1. Tienes un par de llaves. Demasiado setListener{{ debe ser setListener{ . De lo contrario, crearías una lambda dentro de una lambda.
  2. De nuevo, solo eliminas la return . Este es un cuerpo de expresión donde el parámetro resultante se acaba de usar.

      myObject.setListener{p1, p2 -> if (p1) { true } else { false } } 

Si entiendo correctamente, tienes algo como esto:

 fun main(args: Array<String>) { fun setListener(f: (Int, Int) -> Boolean) { f(1, 2) } setListener { p1, p2 -> true } } 

Por supuesto, puede extraer la lógica en otra function como esta:

 fun logic (i: Int, i2: Int) :Boolean { //complex stuff return true } setListener(::logic) 
  • por qué kotlin lambda descomstackdo en código java es (Function0) null.INSTANCE
  • Kotlin: lambdas seguros (sin pérdida de memory)?
  • ¿Cómo usar la expresión Lamba para hacer que las llamadas al método Java sean less detalladas en Kotlin?
  • Kotlin, tabla / matriz basada en inputs con campos dynamics
  • Kotlin: ¿Cómo puedo invocar un campo lambda que tiene un tipo genérico de su class?
  • Kotin Cómo especificar la label de devolución cuando se incluye en Lambda
  • Kotlin, Proguard y lambdas
  • ¿Es posible ocultar variables del cierre de lambda?
  • Tipo de function de Kotlin en su lugar interfaz funcional lambda
  • Emitir no seleccionado al lanzar un object de tipo Cualquiera? en una lambda en kotlin
  • Funciones de Lambda con comodines en Kotlin