Monday, December 15, 2014

Java 8 Lambda Expressions

What is Functional Programming?
  • Programming paradigm
  • Not the same as procedural programming
  • Allows you to pass anonymous functions as parameters
  • Implemented in Java 8 through lambda expressions
  • Used to simplify code
Basic Syntax:

(parameters) -> { function body }

Using Lambda Expressions as Functional Interfaces


You can use lambda expressions to replace interface implementations that have only a single method.

Here's a typical way to create a thread using a Runnable object.

Thread thread = new Thread( new Runnable() {
    public void run() {
        System.out.println("Hello");
    }    
});


thread.start();

You can use a lambda expression to replace an interface with a single method:

Thread thread = new Thread(
    () -> {
        System.out.println("Hello");
    }
);

thread.start();

Adding Parameters

Here's a typical way to create an ActionListener.  The ActionListener interface only has a single method called actionPerformed(ActionEvent e).

JTextField textField = new JTextField();
JLabel label = new JLabel();

textField.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) {
        label.setText(event.getActionCommand());
    }
});

You can add parameters to lambda expressions as well.  Here's the equivalent code using lambda expressions.

JTextField textField = new JTextField();
JLabel label = new JLabel();

textField.addActionListener((ActionEvent event) -> {
    label.setText(event.getActionCommand());
});

The above code can even be simplified further by eliminating the type of the parameter.

JTextField textField = new JTextField();
JLabel label = new JLabel();

textField.addActionListener(event -> {
    label.setText(event.getActionCommand());
});

Hope this simple tutorial helped you get started with Lambda expressions!


Gavin Lim is the lead Java instructor of ActiveLearning, Inc. http://www.activelearning.ph