美文网首页程序员
Java 8 Lambda表达式, 入门的最佳姿势

Java 8 Lambda表达式, 入门的最佳姿势

作者: 橘汁绊饭 | 来源:发表于2017-08-26 21:26 被阅读0次

    Lambda 表达式,自从被Java8引入以来,真的堪称是最大最重量级的新特性。 Lambda丰富了功能化编程,简化了程序员的代码书写。

    语法

    parameter -> expression body

    what? Are you kidding me?
    这么简单?

    是的 就是这么简单!

    我们来看看lambda的一些重要特点:

    • 可选的类型声明:简单的来说 就是我们在使用lambda表达式的时候,不再需要首先定性变量或者参数的类型,因为编译器可以runtime的环境中自动帮你推断出变量的类型,卧槽 是不是碉堡了
    • 可选的参数括号: 如果你的参数只有一个的话,那么你阔以直接省略掉这个括号。但是多个参数的话,括号还是需要的。
    • 可选的方法大括号: 如果你的语句只有一句的话,那么你可以连方法的大括号都不用写。所以就变成了上面的那种形式。
    • 可选的返回值关键词:简单来说如果你方法体只有一句话并且带有返回值,那么你可以不用再写return了, 连return都给你省略了,因为编译器会帮你自动的返回这个值

    说了这么多,那我们来看看具体的用法吧,光说不练假把式, 代码见

    public class Java8Tester {
       public static void main(String args[]){
          Java8Tester tester = new Java8Tester();
            
          //with type declaration
          MathOperation addition = (int a, int b) -> a + b;
            
          //with out type declaration
          MathOperation subtraction = (a, b) -> a - b;
            
          //with return statement along with curly braces
          MathOperation multiplication = (int a, int b) -> { return a * b; };
            
          //without return statement and without curly braces
          MathOperation division = (int a, int b) -> a / b;
            
          System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
          System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
          System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
          System.out.println("10 / 5 = " + tester.operate(10, 5, division));
            
          //without parenthesis
          GreetingService greetService1 = message ->
          System.out.println("Hello " + message);
            
          //with parenthesis
          GreetingService greetService2 = (message) ->
          System.out.println("Hello " + message);
            
          greetService1.sayMessage("Orange");
          greetService2.sayMessage("Cat");
       }
        
       interface MathOperation {
          int operation(int a, int b);
       }
        
       interface GreetingService {
          void sayMessage(String message);
       }
        
       private int operate(int a, int b, MathOperation mathOperation){
          return mathOperation.operation(a, b);
       }
    }
    

    验证结果

    如果你直接使用IDE的话,直接运行就好,如果你喜欢用命令行的话,

    $javac Java8Tester.java
    $java Java8Tester
    

    结果:

    10 + 5 = 15
    10 - 5 = 5
    10 x 5 = 50
    10 / 5 = 2
    Hello Orange
    Hello Cat
    

    Lambda表达式主要还是被用来定义那些只有一个方法的接口,这种情况下,我们可以直接使用Lambda表达式来省略我们的大量方法。它最大的好处就是 消除了繁杂的匿名内部类 的写法,各种大括号,小括号。
    我相信有Android开发经验的人应该能了解吧。那种匿名内部类给你带来的恐惧

    相关文章

      网友评论

        本文标题:Java 8 Lambda表达式, 入门的最佳姿势

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