What does the arrow ("->") operator do in Kotlin?

The -> is a separator. It is special symbol used to separate code with different purposes. It can be used to:

  • Separate the parameters and body of a lambda expression

    val sum = { x: Int, y: Int -> x + y }
    
  • Separate the parameters and return type declaration in a function type

    (R, T) -> R
    
  • Separate the condition and body of a when expression branch

    when (x) {
        0, 1 -> print("x == 0 or x == 1")
        else -> print("otherwise")
    }  
    

Here it is in the documentation.


From the Kotlin docs:

->

  • separates the parameters and body of a lambda expression

  • separates the parameters and return type declaration in a function type

  • separates the condition and body of a when expression branch


The -> is part of Kotlin's syntax (similar to Java's lambda expressions syntax) and can be used in 3 contexts:

  • when expressions where it separates "matching/condition" part from "result/execution" block

     val greet = when(args[0]) {
       "Apple", "Orange" -> "fruit"
       is Number -> "How many?"
       else    -> "hi!"
     }
    
  • lambda expressions where it separates parameters from function body

      val lambda = { a:String -> "hi!" }
      items.filter { element -> element == "search"  }
    
  • function types where it separates parameters types from result type e.g. comparator

      fun <T> sort(comparator:(T,T) -> Int){
      }
    

Details about Kotlin grammar are in the documentation in particular:

  • functionType
  • functionLiteral
  • whenEntry