java-lambda表达式
lambda是一个匿名函数,可以将lambda表达式理解为一段可以传递的代码。使用lambda表达式可以写出更加简洁且灵活的代码。
lambda表达式与原始写法对比
实现Runnable接口
-
使用匿名内部类:
Runnable runnableCls = new Runnable() { @Override public void run() { System.out.println("使用匿名内部类实现Runnable接口"); } };
-
使用Lambda表达式
Runnable runnableLam = ()->{ System.out.println("使用Lambda表达式实现Runnable接口"); };
在这里可以看到,在使用Lambda表达式后,代码变得简洁了许多。Lambda表达式方法中我们可以将代码看做两部分组成,以->为分隔,左侧为Lambda表达式的参数列表,右侧为Lambda体,是抽象方法的实现逻辑。
函数式接口
函数式接口:只包含一个抽象方法的接口
我们可以使用Lambda表达式创建函数式接口的对象。当Lambda表达式需要抛出受查异常时,需要在函数式接口的抽象方法上进行异常的声明。此外,我们可以使用@FunctionalInterface注解来判断接口是否为函数式接口。与其他的函数式编程语言不同,java中的Lambda表达式是一个对象(实现函数式接口的类对象)。java提供了一系列的函数式接口供开发者使用,其中四个常见的函数式接口分别如下:
-
Consumer<T>–消费型接口
public interface Consumer<T> { void accept(T t); //... }
需要对类型为T的对象进行操作。使用Consumer接口打印小于整数n的素数数目:
Consumer<Integer> primeCount = i -> { int count = 1;//从3开始,一定存在素数2 if (i < 3