Java8 函数式编程初识之Lambda表达式

2017-09-23  本文已影响23人  大橙喵

1. 环境

  1. JDK 8
  2. Eclipse Oxygen 或其他支持Java8 的Eclipse版本
  3. Eclipse 自带的 Junit4

2. Lambda表达式

先给出一个定义: 如果一个接口中仅有一个待实现的方法则它在实现的时候可以用Lambda代替.
如,在Java8以前,以创建线程为例.我们需要实现Runnable接口中的run方法将其实例作为参数传给Thread的构造方法,代码如下

Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            // BlahBlahBlah
            System.out.println("BlahBlahBlah");
        }
    });

写了很多格式化的不必要的代码,这就造成了代码冗长,可读性变得很差.从Java8 开始,凡是形如以上格式的代码统统可以使用lambda 表达式来表达

Thread thread1 = new Thread(() -> {
        // BlahBlahBlah
        System.out.println("BlahBlahBlah");
    });

变得清爽了很多.以前的那些格式化的代码变成了形如 ()->{} 的格式.减少了不必要的代码量.
在以上形式的lambda 表达式中,是没有参数的,如果遇到了需要参数的方法,则只需要在()->{} 的圆括号中写入参数即可,示例代码如下
我们先创建一个接口命名为SomeInterface,可见它只有一个待实现的方法,并且需要x,y两个int 类型的参数

package cn.monoy.demos;
public interface SomeInterface {
    public void doSomething(int x, int y);
}

创建一个类,里面有一个方法需要SomeInterface 类型的值作为参数,为了调用方便设为静态的

package cn.monoy.demos;
public class SomeClasses {
    public static void someMethod(SomeInterface si) {
        // do something
    }
}

在主方法调用SomeClasses.someMethod方法时只需要如下代码即可,JVM 会自动推断圆括号中的x,y 是SomeInterface的doSomething方法的参数,他们为int 类型,而不必我们手动声明

public static void main(String[] args) {
        SomeClasses.someMethod((x, y) -> {
            // do something
        });
    }
上一篇 下一篇

猜你喜欢

热点阅读