- 可选用类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选用的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式,返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。(即return…)
- Lambda表达式是对象,而不是函数。
- 举例:
复制代码
- (o1,o2) -> Integer.compare(o1,o2);
- 格式:
- -> :lambda 操作符 或 箭头操作符
- -> 左边:lambda 形参列表 (其实就是接口中的抽象方法的形参列表)
- -> 右边:lambda 体(其实就是重写的抽象方法的方法体)
现有一个Car类如下:复制代码
- @FunctionalInterface
- public interface Supplier<T> {
- T get();
- }
- class Car {
- //Supplier是jdk1.8的接口,这里和lamda一起使用了
- public static Car create(final Supplier<Car> supplier) { //静态方法
- return supplier.get();
- }
- public static void collide(final Car car) { //静态方法
- System.out.println("Collided " + car.toString());
- }
- public void follow(final Car another) { //非静态方法
- System.out.println("Following the " + another.toString());
- }
- public void repair() { //非静态方法
- System.out.println("Repaired " + this.toString());
- }
- }
- 构造器引用:Class::new
复制代码
- final Car car = Car.create( Car::new );
- final List< Car > cars = Arrays.asList( car );
- 静态方法引用:Class::static_method
复制代码
- cars.forEach( Car::collide );
- 特定类的任意对象的方法引用:Class::method
复制代码
- cars.forEach( Car::repair );
- 特定对象的方法引用:instance::method
复制代码
- final Car police = Car.create( Car::new );
- cars.forEach( police::follow );
- Stream自己不会存储元素
- Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
- Stream操作是延迟执行的。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |