美文网首页
[学习笔记]java8新特性——Lambda 表达式

[学习笔记]java8新特性——Lambda 表达式

作者: Alola_ | 来源:发表于2019-05-10 16:21 被阅读0次

    参考自java8新特性

    Lambda 表达式

    可把函数作为参数传递进方法中,使代码变的更加简洁紧凑
    Grammar
    parameters -> expression //auto return
    (parameter1,parameters2) ->{ statements; //need return sth by yourself}
    Features
    可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
    可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号(没有参数的时候括号还是要的)。
    可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
    可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
    Function
    Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。
    Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。

    Complex Examples
    Example1: List 排序 衍生阅读Collection.sort的使用

    import java.util.Collections;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Comparator;
     
    public class Java8Tester {
       public static void main(String args[]){
       
          List<String> names1 = new ArrayList<String>();
          names1.add("Google ");
          names1.add("Runoob ");
          names1.add("Taobao ");
          names1.add("Baidu ");
          names1.add("Sina ");
            
          List<String> names2 = new ArrayList<String>();
          names2.add("Google ");
          names2.add("Runoob ");
          names2.add("Taobao ");
          names2.add("Baidu ");
          names2.add("Sina ");
            
          Java8Tester tester = new Java8Tester();
          System.out.println("使用 Java 7 语法: ");
            
          tester.sortUsingJava7(names1);
          System.out.println(names1);
          System.out.println("使用 Java 8 语法: ");
            
          tester.sortUsingJava8(names2);
          System.out.println(names2);
       }
       
       // 使用 java 7 排序
       private void sortUsingJava7(List<String> names){   
          Collections.sort(names, new Comparator<String>() {
             @Override
             public int compare(String s1, String s2) {
                return s1.compareTo(s2);
             }
          });
       }
       
       // 使用 java 8 排序
       private void sortUsingJava8(List<String> names){
          Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
       }
    }
    执行以上脚本,输出结果为:
    
    $ javac Java8Tester.java
    $ java Java8Tester
    使用 Java 7 语法: 
    [Baidu , Google , Runoob , Sina , Taobao ]
    使用 Java 8 语法: 
    [Baidu , Google , Runoob , Sina , Taobao ]
    

    Example2: a、b的加减乘除

    public class Java8Tester {
       public static void main(String args[]){
          Java8Tester tester = new Java8Tester();
            
          // 类型声明
          MathOperation addition = (int a, int b) -> a + b;
            
          // 不用类型声明
          MathOperation subtraction = (a, b) -> a - b;
            
          // 大括号中的返回语句
          MathOperation multiplication = (int a, int b) -> { return a * b; };
            
          // 没有大括号及返回语句
          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));
            
          // 不用括号
          GreetingService greetService1 = message ->
          System.out.println("Hello " + message);
            
          // 用括号
          GreetingService greetService2 = (message) ->
          System.out.println("Hello " + message);
            
          greetService1.sayMessage("Runoob");
          greetService2.sayMessage("Google");
       }
        
       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);
       }
    }
    

    相关文章

      网友评论

          本文标题:[学习笔记]java8新特性——Lambda 表达式

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