zoukankan      html  css  js  c++  java
  • java8新特性-Lambda表达式

      前文介绍了java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习。本文就从java8新特性中比较重要的Lambda表达式开始学习。

    首先:为什么要使用lambda表达式?

      Lambda是一个匿名函数,我们可以baLambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁,更灵活的代码。作为一种更紧凑得代码风格,使得java得语言表达能力得到提升。

    一、Lambda 表达式的基础语法:

      Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符箭头操作符将 Lambda 表达式拆分成两部分:
      左侧:Lambda 表达式的参数列表
      右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体

    1. 语法格式一:无参数,无返回值   ———— () -> System.out.println("Hello Lambda!");
          @Test
          public void test1(){
              int num = 0;//jdk 1.7 前,必须是 final
              //java8之前写法
              Runnable r = new Runnable() {
                  @Override
                  public void run() {
                      System.out.println("Hello World!" + num);
                  }
              };
              r.run();
              System.out.println("---------使用lambda以后----------");
              Runnable r1 = () -> System.out.println("Hello Lambda!");
              r1.run();
          }
    2. 语法格式二:有一个参数,并且无返回值 ———— (x) -> System.out.println(x);
    3.     @Test
          public void test2(){
              Consumer<String> con = (x) -> System.out.println(x);
              con.accept("Lambda威武!");
          }
    4. 语法格式三:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
          @Test
          public void test3(){
              Comparator<Integer> com = (x, y) -> {
                  System.out.println("函数式接口");
                  return Integer.compare(x, y);
              };
          }
    5. 语法格式四:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写 —— Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

          @Test
          public void test4(){
              Comparator<Integer> com = (Integer x, Integer y) -> Integer.compare(x, y);
          }
    6. 语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断” —— (Integer x, Integer y) -> Integer.compare(x, y);

          @Test
          public void test4(){
              Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
          }

      二、Lambda 表达式需要“函数式接口”的支持

      

    1.  函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰  可以检查是否是函数式接口
       @FunctionalInterface
       public interface myLambdaModle<T> {
       
           public int getValue(T t2);
           
       }
    2. 需求:对两数进行运算
      //需求:对一个数进行运算
          @Test
          public void test6(){
              Integer num = operation(100, (x) -> x * x);
              System.out.println(num);
              
              System.out.println(operation(200, (y) -> y + 200));
          }
          
          public Integer operation(Integer num, myLambdaModle my){ 

      return mf.getValue(num);
         }
  • 相关阅读:
    用醋泡脚有什么好处
    用姜泡脚有什么好处
    坚持跑步与读书,方不辜负此生
    干货!几招教你降低论文重复率!!
    Android Handler 源码分析(详细)
    教你控制 RecyclerView 滑动的节奏
    鸟哥的Linux私房菜:基础学习篇 —— 第六章笔记
    鸟哥的Linux私房菜:基础学习篇 —— 第五章笔记
    synchronized(this) 与synchronized(class) 之间的区别
    Android 扩大 View 的点击区域
  • 原文地址:https://www.cnblogs.com/zhangweibin/p/11079630.html
Copyright © 2011-2022 走看看