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

      在Java8之前,如果要往接口传参,总是传匿名内部类,如一个线程启动:

    new Thread(new Runnable() {
    	@Override
    	public void run() {
    		System.out.println("run");
    	}
    }).start();
    

     

      在Java8中出现了一种新特性Lambda 表达式,也可称为闭包,允许把函数作为一个方法的参数(函数作为参数传递进方法中),即函数式编程;

      函数式编程,在数学中,函数就是有输入量()、输出量return的一套计算方案,也就是“拿什么东西做什么事情”;相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式做;

      

      Lambda语法格式:

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

      

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

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

      使用例程如下:

    public class LambdaTest {
    	
    	public static void main(String args[]){
    		// 类型声明
    		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 = " + operate(10, 5, addition));
    		System.out.println("10 - 5 = " + operate(10, 5, subtraction));
    		System.out.println("10 x 5 = " + operate(10, 5, multiplication));
    		System.out.println("10 / 5 = " + operate(10, 5, division));
    
    		// 不用括号
    		GreetingService greetService1 = message ->
    		System.out.println("Hello " + message);
    
    		// 用括号
    		GreetingService greetService2 = (message) ->
    		System.out.println("Hello " + message);
    
    		greetService1.sayMessage("Java");
    		greetService2.sayMessage("C++");
        }
        
    	interface MathOperation {
    		int operation(int a, int b);
    	}
        
        interface GreetingService {
    		void sayMessage(String message);
        }
        
        private static int operate(int a, int b, MathOperation mathOperation) {
    		return mathOperation.operation(a, b);
        }
    
    }
    

      得到的结果为:

    10 + 5 = 15
    10 - 5 = 5
    10 x 5 = 50
    10 / 5 = 2
    Hello Java
    Hello C++
    

     

      以前用的是匿名内部类,现在可以用Lambda表达式来代替,做的事情是:参数传递;执行方法体做事情:()->{};

      在Lambda标准格式()->{}的基础上,使用省略写法的规则为:

    1. 小括号内参数的类型可以省略;

    2. 如果小括号内有且仅有一个参数,则小括号可以省略;

    3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号;

  • 相关阅读:
    Python 函数 之 目录
    python---------匿名函数
    python-------递归函数
    python-----内置函数
    hibernate.cfg.xml
    struts2 工作原理
    拦截器
    js制作 子菜单
    struts---最简单实例步骤
    常用标签---地址----
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/10487133.html
Copyright © 2011-2022 走看看