Friday, 1 January 2021

Java Lambda Expressions


 

 Lambda expression: A short block of code which takes in parameters and returns a value

 

1) Simplest lambda expression contains a single parameter and an expression:

parameter -> expression

 

2) To use more than one parameter, wrap them in parentheses:

(parameter1, parameter2) -> expression

 

3) In order to do more complex operations, a code block can be used with curly braces:

(parameter1, parameter2) -> { code block }

*If the lambda expression needs to return a value, then the code block should have a return statement

 

Lambda expressions can be used in multiple ways, which are

Variation 1) Lambda expressions are usually passed as parameters to a function

Example:

public class Main {

  public static void main(String[] args) {

    ArrayList<Integer> numbers = new ArrayList<Integer>();

    numbers.add(5);

    numbers.add(9);

    numbers.add(8);

    numbers.add(1);

    numbers.forEach( (n) -> { System.out.println(n); } );

  }

}

 

Variation 2) Lambda expressions can be stored in variables if the variable's type is an interface which has only one method. The lambda expression should have the same number of parameters and the same return type as that method. Java has many of these kinds of interfaces built in, such as the Consumer interface (found in the java.util package) used by lists.

Example:

public class Main {

  public static void main(String[] args) {

    ArrayList<Integer> numbers = new ArrayList<Integer>();

    numbers.add(5);

    numbers.add(9);

    numbers.add(8);

    numbers.add(1);

    Consumer<Integer> method = (n) -> { System.out.println(n); };

    numbers.forEach( method );

  }

}

 

Variation 3) To use a lambda expression in a method, the method should have a parameter with a single-method interface as its type. Calling the interface's method will run the lambda expression.

Example:

interface StringFunction {

  String run(String str);

}

 

public class Main {

  public static void main(String[] args) {

    StringFunction exclaim = (s) -> s + "!";

    StringFunction ask = (s) -> s + "?";

    printFormatted("Hello", exclaim);

    printFormatted("Hello", ask);

  }

  public static void printFormatted(String str, StringFunction format) {

    String result = format.run(str);

    System.out.println(result);

  }

}

No comments:

Post a Comment