zoukankan      html  css  js  c++  java
  • Lambda 表达式实例

    public class Java8Tester {
    /**
    *

    语法

    
    

    lambda 表达式的语法格式如下:

    
    
    (parameters) -> expression(parameters) ->{ statements; }
    
    

    以下是lambda表达式的重要特征:

    
    
    • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
    • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
    • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
    • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值

    */
    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"); }

    /**

    lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误

    * 变量作用域

    
    

    */

    尽管salutation未明显定义final语义,但其实隐性具有了final的语义,所以此时再去修改salutation值,会编译不通过

    
    

    @Test

    
    

    public void paramDomain() {

    
    

    GreetingService greetService1 = message -> System.out.println(salutation + message);

    
    

    greetService1.sayMessage(" World");

    
    

    }

    private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } }
    output:
    10 + 5 = 15
    10 - 5 = 5
    10 x 5 = 50
    10 / 5 = 2
    Hello Runoob
    Hello Google

    /**

    *Java 8中允许接口实现方法, 而不是简单的声明, 这些方法叫做默认方法,使用特殊的关键字default
    因为默认方法不是抽象方法,所以不影响我们判断一个接口是否是函数式接口

    */

    interface GreetingService {

    void sayMessage(String message);

     

    default void say(String message) {

    System.out.println("hi,"+message);

    }

     

     

    }

     

    @Test

    public void paramDomain1() {

    GreetingService greetService1 = (p) -> {};

     

     

     

    greetService1.sayMessage("d");

    greetService1.say(" jay");

     

    }

     

    output:

    hi, jay

  • 相关阅读:
    非科班能学会编程吗,怎么学习
    自学Java最起码要学到什么程度?
    一个 Java 线程生命周期,我竟然可以扯半小时
    Java基础编程练习题
    Java程序员从小工到专家成神之路(2020版)
    学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的?
    初学者该如何学习Java(附带Java学习路线)
    Java程序员必备基础:Object的十二个知识点
    Web前端和JAVA应该学哪个?哪个就业形势更好?
    随笔(三十)
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9283759.html
Copyright © 2011-2022 走看看