1.为什么用lambda
简化我们的操作
举个例子
创建一个线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hh");
}
}).start();
以前我们快速创建一个线程要这样
现在用lambda
new Thread(()-> System.out.println("lambda-->hh")).start();
一个更重要的原因是Java 以后为了更好的函数式编程
2.lambda怎么用
2.1 lambda的使用场景
lambda只能用在函数式接口,函数式接口就是一个接口里面只有一个抽象方法
* @author Arthur van Hoff
* @see java.lang.Thread
* @see java.util.concurrent.Callable
* @since JDK1.0
*/
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
可以通过@FunctionalInterface来表示是一个函数式接口
Java 为我们创建了很多常用的函数式接口,不用我们一个一个来创建
四大内置函数式接口
Consumer< T > 消费性 接口: void accept(T t);
Supplier< T > 供给型接口 : T get();
Function< T , R > 函数式接口 : R apply (T t);
Predicate< T > 断言形接口 : boolean test(T t);
2.2 使用
(参数)->{方法体}
new Thread(()-> { System.out.println("lambda-->hh");}).start();
其实到这就可以熟练的用lambda,但是它还能简化,你说气不气=。=
1.一个参数时可省略()
Consumer consumer = x -> System.out.println(x);
consumer.accept("1个参数省略()");
2.方法体只有一条语句省略{}
== 不管它是否需要有返回值==
Function function= x-> x;
Integer apply = function.apply(1);
System.out.println(apply);
3.类型推断
lambda 表达式的参数类型可省略不写
聪明的你肯定发现了为什么参数 不需要写类型,为什么不需要,Java会根据泛型来推断
你也可以指定参数的类型,但是没必要
Consumer consumer = (String x) -> System.out.println(x);
3.方法引用
System.out.println("呼呦呦");
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}郑州人流医院哪家好 http://mobile.zhongyuan120.com/
}
println是一个参数没有返回
这和Consumer 消费者接口很符合啊,下面这样写可不可以简化啊(就nm事多)
Consumer consumer = x -> System.out.println(x);
简化版
Consumer consumer1 = System.out::println;
方法引用 参数与返回值需要一致