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

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开发经验的人应该能了解吧。那种匿名内部类给你带来的恐惧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容