Java8 函数式编程

方法接口

只有一个抽象方法的接口。方法接口存在的目的就是为了传递一个方法,例如

@FunctionalInterface  
public interface Runnable {  
    public abstract void run();  
}

Java8后增加了注解@FunctionalInterface来指明一个接口是方法接口

实现方法接口的抽象方法

传统方法

定义子类

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("hello");
    }
}

使用匿名内部类

Runnable runnable = new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("hello");
    }  
}

lambda表达式

可看作匿名内部类的语法糖

Runnable runnable = () -> {  
     System.out.println("hello");
};

可简化为

Runnable runnable = () -> System.out.println("hello");

参数列表为1个参数,则小括号可省略。表达式内只有一个语句时,大括号、语句最后的分号和return可省略

方法引用

当lambda表达式内部只调用一个方法的时候,在无需引入新的参数时,可以使用方法引用进行简化

Runnable runnable = System.out::println;

Java方法引用详解

通用函数式接口

Java8准备好了一系列的通用函数式接口

Java8 函数式接口