zoukankan      html  css  js  c++  java
  • java8的新特性


    1.Lambda表达式:可以称为闭包,Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读,最重要的是代码量也随之减少很多。
    1.1语法:(parameters) -> expression或(parameters) ->{statements;}
    ():参数列表;
    ->: 运算符;
    即:() -> lambda主体(单一表达式或语句块)
    1.2变量作用域:只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误
    1.3 eg:
    无参数:
    //不使用Lambda表达式

    1 Runnable runnable1=new Runnable(){
    2     @Override
    3     public void run(){
    4         System.out.println("Running without Lambda");
    5     }
    6 };

    //使用Lambda表达式

    1 Runnable runnable2=()->System.out.println("Running from Lambda");

    一个参数:x -> 2 * x ;
    两个参数:(x, y) -> x – y ;

    2.方法引用:通过方法的名字来指向一个方法,可以使语言的构造更紧凑简洁,减少冗余代码。
    语法:使用一对冒号 ::。

    1 @FunctionalInterface
     2 public interface Supplier<T> {
     3     T get();
     4 }
     5  
     6 class Car {
     7     //Supplier是jdk1.8的接口,这里和lamda一起使用了
     8     public static Car create(final Supplier<Car> supplier) {
     9         return supplier.get();
    10     }
    11  
    12     public static void collide(final Car car) {
    13         System.out.println("Collided " + car.toString());
    14     }
    15  
    16     public void follow(final Car another) {
    17         System.out.println("Following the " + another.toString());
    18     }
    19  
    20     public void repair() {
    21         System.out.println("Repaired " + this.toString());
    22     }
    23 }
    • 构造器引用:它的语法是Class::new,或者更一般的Class< T >::new实例如下:

      final Car car = Car.create( Car::new )final ListCar > 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 );

    3.函数式接口:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

    函数式接口可以被隐式转换为 lambda 表达式。

  • 相关阅读:
    2.分布式锁
    1. junit用法,before,beforeClass,test,after, afterClass的执行顺序
    GC算法
    记一次"截图"功能的前期调研过程!
    程序员转行手册!
    Yarn详细的工作流程
    Yarn的三种调度器(Scheduler)
    Hadoop序列化与Java序列化的区别
    MapReduce执行过程
    从普通登录到单点登录图例
  • 原文地址:https://www.cnblogs.com/talenter/p/9926086.html
Copyright © 2011-2022 走看看