2.1 概述
Lambda是JDK8中一个语法糖。
他可以对某些匿名内部类的写法进行简化。
它是函数式编程思想的一个重要体现。
让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。
2.2 核心原则
可推导 可省略
2. 3 基本格式
(参数列表)->{代码}
new Thread(()->{
System.out.println("你知道吗 我比你想象的 更想在你身边");
}).start();
只有函数式接口才可以被lambda表达式所使用
函数式接口是指只定义了一个抽象方法的接口,或者加了 @FunctionalInterface 注解的接口
四大函数式接口
四大函数式接口分别是:
功能型函数接口(Function)
开源码知道传入参数和返回类型 传入什么返回什么。
用匿名内部类new出函数式接口实现
public static void main(String[] args) { Java8InnerFunction function=new Java8InnerFunction(); int i1 = function.functionCompute(5, x -> x * 10); System.out.println("计算后的结果值是:"+i1); } public int functionCompute(int a,Function<Integer,Integer> function){ return function.apply(a); }
消费型函数接口(Consumer)
消费者接口
只有输入没有返回值
public static void main(String[] args) { Java8InnerFunction function=new Java8InnerFunction(); function.consumMoney(1000,x-> System.out.println("消费了:"+x+"元")); } public void consumMoney(int money, Consumer consumer){ consumer.accept(money); }
供给型函数式接口(Supplier)
没有参数只有返回值
返回值类型为泛型。
public static void main(String[] args) { Java8InnerFunction function=new Java8InnerFunction(); int i = function.supplyRandomNum(() -> (int) (Math.random() * 100); ); System.out.println("获得的随机数是:"+i); } public int supplyRandomNum(Supplier<Integer> supplier){ return supplier.get(); }
断言型函数式接口(Predicate)
传入泛型返回boolean类型
断定形接口
public static void main(String[] args) { Java8InnerFunction function=new Java8InnerFunction(); boolean b = function.predicateCompare(101, x -> x > 100); System.out.println("101比100大吗:"+b); } public boolean predicateCompare(int x,Predicate<Integer> predicate){ return predicate.filter(x); }
2.4 省略规则
-
参数类型可以省略
-
方法体只有一句代码时大括号return和唯一一句代码的分号可以省略
-
方法只有一个参数时小括号可以省略
-
以上这些规则都记不住也可以省略不记