zoukankan      html  css  js  c++  java
  • JDK 1.8 新特性之Lambda表达式

    在说Lambda表达式之前,先介绍一下函数式接口

    函数式接口

    就是只定义了一个抽象方法的接口,我们可以使用注解@Functionallnterface,来强约束这种接口为函数式接口。如Runnable、Callable、Comparator等接口。

    Java内置的四大函数式接口:Consumer<T>,Supplier<T>,Function<T,R>,Predicate<T>。
    Lambda表达式就是专门用来实现这些函数式接口的表达式。

    @FunctionalInterface
    public interface Runnable {
        public abstract void run();
    }

    以Runnbale线程为例

    Runnable runnable = new Runnable()
    {
          @Override
           public void run()
           {
              System.out.println("hello lambda!");
           }
    };
    new Thread(runnable).start();

    用Lambda表达式则可修改为:

    Runnable runnable = ()->{   
        System.out.println("hello lambda!");
    }; 
    new Thread(runnable).start();

    其中参数列表:与接口中方法的参数列表要求一致。

    Lambda特点总结

    • 参数列表中的参数类型可以直接都忽略掉不写。(注意是参数类型,不是参数。因为因为JVM编译器通过上下文推断出数据类型)
    • 如果只有一个参数,圆括号也可以省略
    • 方法体如果只有一语句,可以省略掉大括号
    • 如果仅有一条语句,并且他是return语句的话,那么可以直接省略掉return关键字

    示例

    语法一:无参数,且无返回值类型

    public void test() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
            System.out.println("Hello Lambda!");        
            }
        };
        runnable.run();
    }
    /**
     *  () -> System.out.println("Hello Lambda!");
     */public void test() {
    // "->" 左边只有一个小括号,表示无参数,右边是Lambda体(相当于实现了匿名内部类里面的方法了,即一个可用的接口实现类了)
    Runnable runnable = ()->System.out.println("Hello Lambda!");    
    runnable.run();
    }

    语法二:一个参数,且无返回值类型

    /**
    *  (x) -> System.out.println(x)
    */
    public void test() {
      //这个e就代表所实现的接口的方法的参数
      Consumer<String> consumer = (e)->System.out.println("Hello"+e);
      consumer.accept("Lambda");
    }
    /**
    *  x -> System.out.println(x)
    * 一个参数的话“()”可以省略
    */ public void test() {   //这个e就代表所实现的接口的方法的参数   Consumer<String> consumer = e->System.out.println("Hello"+e);   consumer.accept("Lamdba"); }

    语法三:两个以上的参数,且有返回值,且 Lambda 体中有多条语句

    public void test4() {
      //Lambda 体中有多条语句,要用大括号括起来
      Comparator<Integer> com = (x, y) -> {
        System.out.println("函数式接口");
        return Integer.compare(x, y);
      };
      int compare = com.compare(100, 244);
      System.out.println(compare);
    }
  • 相关阅读:
    初次使用github
    linux 如何显示一个文件的某几行
    ubuntu 2
    在html页中作跳转
    gmail邮箱 livemail 设置
    配置nginx与wordpress碰到的一个偱环重定向问题
    在nginx服务部署startbbs
    Attaching the script debugger to process *** failed on machine "***"
    linux查看文件夹大小
    linux 合并文件
  • 原文地址:https://www.cnblogs.com/niudaben/p/11941880.html
Copyright © 2011-2022 走看看