一、Lambda表达式
Lambda是java8推出的新特性,在优化代码结构上有很大的便利。Lambda表达式是对匿名内部类的一种优化的语法。
对比下面的例子就可以看出来lambda的写法更加简洁。
//传统写法
new Thread(new Runnable(){// 接口名
@Override
public void run(){// 方法名
System.out.println("Thread run()");
}
}).start();
//lambda写法
new Thread(
() -> System.out.println("Thread run()")// 省略接口名和方法名
).start();
二、用法
lambda只可以用于只有一个抽象方法的接口,如上面的例子使用lambda表
达式的形式替代了Runnable接口的调用。
看下Runnable接口的源码便可了解,注意到接口上存在@FunctionalInterface注解, 标记这是一个函数式接口(不写也可)
因此,lambda表达式的整体结构可以理解为:
(接口参数列表) -> {
//具体的逻辑
}
如果是代码块内仅有一行数据,那么花括号可忽略不写
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
三、java.util.function中常用的函数式接口
//Function
R apply(T t);
//Consumer
void accept(T t);
//Predict
boolean test(T t);
//Supplier
T get();
四、方法引用
待补充
五、Stream操作
待补充
六、Stream性能分析
待补充