首页 > 编程语言 >Java Lambda 表达式

Java Lambda 表达式

时间:2022-11-12 13:31:10浏览次数:49  
标签:Java int void MathOperation 接口 operation public 表达式 Lambda

(目录)

一、说明

Lambda表达式是什么

  • Lambda 表达式也称为闭包,是Java 8 发布的新特性
  • Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)

为什么要使用Lambda表达式

  • 避免匿名内部类定义过多,可以让代码简洁紧凑,留下核心的逻辑

二、理解

语法格式

(parameters) -> expression[表达式]
(parameters) -> statements[语句]
(parameters) ->{ statements; }

函数式接口

Functional lnterface(函数式接口)是指任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口,可以通过Lambda表达式创建该接口的对象

public interface Runnable {
    public abstract void run();
}

特征

  • 可省略类型声明:不需要声明形式参数类型
  • 可省略参数括号:一个参数无需定义括号,但多个参数需要定义括号
  • 可省略花括号:如果主体只包含了一个语句就不需要使用花括号
  • 可省略返回关键字:如果主体只包含了一个返回值语句则会自动返回

三、演示

1.常规方法实现

正常情况下的实现加法函数计算,需要定义接口并实现类,再调用方法,在此基础上不断简化,去深入理解Lambda 表达式是如果做到的 在这里插入图片描述

public class LambdaDemo {
	
    public static void main(String[] args) {
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口方法
interface MathOperation{
    void operation(int a, int b);
}
    //2.定义实现类
class Addition implements MathOperation{
    @Override
    public void operation(int a, int b) {
        System.out.println(a + b);
    }
}

2.静态内部类

进一步改进使得代码更紧凑,实现静态内部类,也就是将实现类放入主类中,会提示我们需要定义静态类

在这里插入图片描述 在这里插入图片描述

public class LambdaDemo {
    //2.实现静态内部类
    static class Addition implements MathOperation{
        @Override
        public void operation(int a, int b) {
            System.out.println(a + b);
        }
    }
    public static void main(String[] args) {
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}

3.局部内部类

可是静态内部类还是太繁琐了,如果把它放进方法里面呢?由此引出局部内部类,即在一个方法中定义的内部类,这时就不用定义静态类了

在这里插入图片描述

public class LambdaDemo {
    public static void main(String[] args) {
    //2.实现局部内部类
        class Addition implements MathOperation{
            @Override
            public void operation(int a, int b) {
                System.out.println(a + b);
            }
        }
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}

4.匿名内部类

局部内部类还是感觉代码太多了,如果简化呢?比如把类名隐藏?匿名内部类就是没有名字的内部类,其必须实现接口或抽象父类的所有抽象方法

在这里插入图片描述

public class LambdaDemo {
    public static void main(String[] args) {
    //2.实现匿名内部类,实现接口,直接执行计算
        new MathOperation(){
            @Override
            public void operation(int a, int b) {
                System.out.println(a + b);
            }
        }.operation(1, 2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}

在这里插入图片描述

public class LambdaDemo {
    public static void main(String[] args) {
    //2.实现匿名内部类,实现接口
        MathOperation addition = new MathOperation() {
            @Override
            public void operation(int a, int b) {
                System.out.println(a + b);
            }
        };
    //3.执行计算
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}

5.Lambda表达式

都已经没有类名了,能否再简化呢?用Lambda试试,因为接口中只有一个方法,方法中只有一块语句,因此可以省略接口和方法,只留下语句实现

在这里插入图片描述

public class LambdaDemo {
    public static void main(String[] args) {
        //2.Lambda简化,只有一块语句,省略接口和方法,只留下语句实现
        MathOperation addition = (int a , int b) -> {
            System.out.println(a + b);
        };
        //3.执行计算
        addition.operation(1, 2);
    }
}
        //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}

6.Lambda再简化

Lambda 表达式还可以省略参数类型,因为一行语句,因此可以省略花括号

在这里插入图片描述

public class LambdaDemo {
    public static void main(String[] args) {
        //2.Lambda简化,省略参数类型,代码块只有一句,可以省略花括号
        MathOperation addition = (a , b) -> System.out.println(a + b);
        //3.执行计算
        addition.operation(1,2);
    }
}
        //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}

标签:Java,int,void,MathOperation,接口,operation,public,表达式,Lambda
From: https://blog.51cto.com/yeatsliao/5846612

相关文章

  • 原生 HTML + CSS + JavaScript 写时钟
    时钟效果目录结构HTML代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • Java多线程中锁的理解与使用
    参考:https://blog.csdn.net/tyyj90/article/details/782360531.简介锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如synchronized和ReentrantLock等)......
  • Java环境变量配置
    1常用的Windows快捷键Ctrl+C:复制Ctrl+V:粘贴Ctrl+A:全选Ctrl+X:剪切Ctrl+Z:撤销Ctrl+S:保存Alt+F4:关闭窗口Ctrl+D:删除Shift+Delete:永久删除Win+R:运行窗口Win+E:我的......
  • java的位运算
    本文主要阐明java中的位运算规则首先介绍原码,反码,补码的概念 下面介绍位运算符 具体代码如下:System.out.println(4>>2);//(4/2)/2System.out.println(4<<......
  • Jsp中EL表达式不起作用
    困扰了很久的JSP中的表达式被当成字符串处理,原因是出于版本不同,有些isELIgnored属性默认值为false,但有些默认为true;所以这里要手动配置isELIgnored的属性为false<%@pag......
  • Java中的接口详解
    概述接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK7及以前),默认方法和静......
  • java 和 maven 环境配置
    1.说明系统版本:CenetOS7 最小化安装Java版本:jdk-8u192-linux-x64.tar.gzmaven:apache-maven-3.6.3-bin.tar.gz操作系统安装过程参考:​​Linux系统安装标准​​2.Java 安......
  • Java项目的程序里为什么老用注解?注解有哪些作用
    注解和注释不同的是,注解会被Java编译器处理而非跳过。注解是在JDK5.0版本开始引入的,它可以在编译期使用预编译工具进行处理,也可以在运行期使用Java反射机制进行处理。......
  • 一文学会JavaScript计时事件
    文章目录​​JavaScript计时事件​​​​setInterval()方法​​​​clearInterval()方法​​​​setTimeout()方法​​​​clearTimeout()方法​​JavaScript计时事件......
  • 【JavaScript】操作BOM
    文章目录​​什么是BOM​​​​常用浏览器对象​​​​Window对象​​​​Window尺寸​​​​其他方法​​​​Screen对象​​​​Navigator对象​​​​History对象​​......