Introduction
Lambda expressions provide a clear and concise way of implementing a single-method interface using an expression. They allow you to reduce the amount of code you have to create and maintain. While similar to anonymous classes, they have no type information by themselves. Type inference needs to happen.
Method references implement functional interfaces using existing methods rather than expressions. They belong to the lambda family as well.
Syntax
- () -> { return expression; } // Zero-arity with function body to return a value.
- () -> expression // Shorthand for the above declaration; there is no semicolon for expressions.
- () -> { function-body } // Side-effect in the lambda expression to perform operations.
- parameterName -> expression // One-arity lambda expression. In lambda expressions with only one argument, the parenthesis can be removed.
- (Type parameterName, Type secondParameterName, ...) -> expression // lambda evaluating an expression with parameters listed to the left
- (parameterName, secondParameterName, ...) -> expression // Shorthand that removes the parameter types for the parameter names. Can only be used in contexts that can be inferred by the compiler where the given parameter list size matches one (and only one) of the size of the functional interfaces expected.