Lambda表达式是java 8 带来的革新.
Lambda 表达式让你能够将函数作为方法参数,或者将代码作为数据对待。
优点:在 Java 8 之前,匿名内部类,监听器和事件处理器的使用都显得很冗长,减少代码量,可读性增强, 发挥多核 CPU 的优势;
使用范围: 匿名内部类,监听器和事件处理器, 集合.
<h3>1.使用lambda表达式</h3>
要使用 Lambda 表达式,需要定义一个函数式接口, 如:
Function<T, R>:将 T 作为输入,返回 R 作为输出,他还包含了和其他函数组合的默认方法。
Predicate<T> :将 T 作为输入,返回一个布尔值作为输出,该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(与、或、非)。
Consumer<T> :将 T 作为输入,不返回任何内容,表示在单个参数上的操作。
上面的函数式接口是jdk 8里定义的,也可以自定义,定义一个接口,然后定义一个(只能一个)抽象方法.这个类就被识别成Functional Interface,当然最好在接口前加个标签@FunctionalInterface
@FunctionalInterface
public interface Functional<T> {
public void thefunction(T t);
}
<h3>2. lambda表达式</h3>
(Type t)->{ expression;}
由于可以识别Type 所以,可以简化成
(t)->{expression;}
如果只有一个变量,可以简化括号
t->{expression;}
如果只有一行语句,可以简化括号,去掉括号以后就不用加分号了
(t)->expression
例子:
Map<String,String> map…
map.forEach((String key,String value)
->{ System.out.println(key +" : "+value);}
);
简化成
map.forEach((key, value)
-> System.out.println(key +" : "+value)
);
还有一种写法
Type::Method
例子
i->System.out.println(i)
也可以写成
System.out::println
<h3>参考目录</h3>
Java 8 新特性概述
Oracle java 8