美文网首页
黑猴子的家:Java 8 -> Lambda 表达式语法

黑猴子的家:Java 8 -> Lambda 表达式语法

作者: 黑猴子的家 | 来源:发表于2019-03-02 06:02 被阅读1次
    1、语法
    (o1,o2) -> o2.compareTo(o1)
    (e) -> e.getAge() > 30
    

    (参数名1,...)->{方法主体}
    注意
    (1)当只有一个参数时,可以省略小括号,如果有多个参数,需要加上小括号
    (2)方法体的语句需要用大括号包起来,但如果只有一句话,则可以省略大括号
    如果仅有的一句话还是return语句,则return 也可以省略

    2、概念

    Lambda表达式相当于匿名内部类,赋值给一个接口
    Runnable run = (参数名1,...)->{方法主体}

    3、分类

    函数式接口中的方法分类

    (1)无返回-无参
    (2)无返回-有参数
    (3)有返回-有参数
    
    4、无返回-无参 案例一
    package demo1;
    import org.junit.Test;
    /**
     * @author 黑猴子的家
     * https://www.jianshu.com/u/37fd8e2dff4c
    */
    public class TestLambda3 {
          //1、无返回无参
          @Test
          public void test1() {
                Runnable r = new Runnable() {
                      @Override
                      public void run() {
                            System.out.println("1 阿甘跑啊跑啊!!!");
                            System.out.println("2 阿甘跑啊跑啊!!!");
                            System.out.println("3 阿甘跑啊跑啊!!!");
                      }
                };
                r.run();
                System.out.println("------------------------");
                // 返回肯定是Runnable类型,所以 new Runnable()代码冗余了
                // 类似于 枚举的 public static 使用了enum 关键字 直接省略了,都是一个优化的过程
                Runnable r1 = () -> {
                      System.out.println("1 阿甘跑啊跑啊!!!");
                      System.out.println("2 阿甘跑啊跑啊!!!");
                      System.out.println("3 阿甘跑啊跑啊!!!");
                };
                r1.run();
          }
    }
    
    5、无返回-有参,一个参数 案例二
    interface I1 {
          void play(String str);
    }
    public class TestLambda3 {
    //2、无返回有参,一个参数
          @Test
          public void test2() {
                I1 i = new I1() {
                      @Override
                      public void play(String str1) {
                            System.out.println("我喜欢玩" + str1);
                      }
                };
                i.play("足球");
                System.out.println("-------------------------");
                I1 i1 = (str1) -> System.out.println("我喜欢玩" + str1);
                //I1 i1 = str1 -> System.out.println("我喜欢玩" + str1);
                i1.play("足球");
          }
    }
    
    6、无返回-有参,二个参数 案例三
    interface I2 {
          void play(String str1, String str2);
    }
    public class TestLambda3 {
          //3、无返回-有参,两个参数
          @Test
          public void test3() {
                I2 i = new I2() {
                      @Override
                      public void play(String str1, String str2) {
                            System.out.println("我喜欢玩" + str1 + "和" + str2);
                      }
                };
                i.play("足球", "篮球");
                System.out.println("-------------------------");
                I2 i1 = (str1, str2) -> System.out.println("我喜欢玩" + str1 + "和" + str2);
                i1.play("足球", "篮球");
          }
    }
    
    7、有返回-有参,二个参数 案例四
    interface I3<T, R> {
          R cale(T t1, T t2);
    }
    public class TestLambda3 {    
    //4、有返回有参
          @Test
          public void test4() {
                I3<Double, Integer> i = new I3<Double, Integer>() {
                      @Override
                      public Integer cale(Double t1, Double t2) {
                            return (int) (t1 + t2);
                      }
                };
                System.out.println(i.cale(1.5, 2.6));
                System.out.println("------------------------");
                I3<Double, Integer> i2 = (t1, t2) -> (int) (t1 + t2);
                System.out.println(i2.cale(2.2, 3.3));
          }
    }
    

    相关文章

      网友评论

          本文标题:黑猴子的家:Java 8 -> Lambda 表达式语法

          本文链接:https://www.haomeiwen.com/subject/fxfjuqtx.html