java中的lambda表达式

  • Lambda表达式在一定程度上可以简化匿名内部类的代码

  • lambda表达式与匿名内部类区别:匿名内部类可以实现或继承接口或类;Lambda表达式只能实现函数式接口

  • Lambda 允许把函数作为一个方法的参数

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

  • lambda 表达式的局部变量可以不用声明为 final,隐性的具有 final 的语义

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

关于内部类中匿名内部类的内容可以看这:java中的内部类

看看lambda表达式是什么:

package com;

public class demo1 {
    public static void main(String[] args) {
        // 1. 匿名内部类形式
        A a1 = new A() {
            @Override
            public void print(int n) {
                System.out.println("值为" + n);
            }
        };
        a1.print(1);

        // 使用lambda表达式
        A a2 = (int n) -> {System.out.println("值为" + n);};
        a2.print(2);

		// 省略lambda表达式部分内容
        // 可以省略参数类型
        // 只有一个参数,省略小括号
        // 只有一条语句,省略大括号
        A a3 = n -> System.out.println("值为" + n);
        a2.print(3);

		// 2. 匿名内部类形式 (有返回值的)
        B b1 = new B() {
            @Override
            public int create() {
                return 4;
            }
        };
        System.out.println(b1.create());

        // 使用lambda表达式
        // 无参不能省略小括号
        // 如果主体只有一个表达式返回值则编译器会自动返回值,省略return
        B b2 = () -> 5;
        System.out.println(b2.create());
    }
}


// 定义一个接口(函数式接口)
interface A{
    // 能实现lambda表达式的接口要求: 只能有一个需要被实现的方法(抽象方法),不是规定接口中只能有一个方法
    // operator方法是A中唯一需要被实现的方法
    void print(int n);
    
    // 有这种default方法是没事的
    default void operator1(int a, int b){

    }
}

interface B{
    int create();
}

关于default方法可以看这:java中的abstract和interface浅析_抽象__接口

一种用途:cal方法可以对2, 1两个数根据传入的操作方法参数进行计算

package com;

public class demo2 {

    // 计算
    public int cal(op operate){
        return operate.operator(2,  1);
    }

    public static void main(String[] args) {
        //加
        op add = (a, b) -> a + b;

        //减
        op sub = (a, b) -> a - b;

        //乘
        op mul = (a, b) -> a * b;

        //除
        op div = (a, b) -> a / b;

        demo2 d = new demo2();

        int result = d.cal(add);
        int result2 = d.cal(div);
        System.out.println("add:" + result + "\ndiv:" + result2);

    }
}

// 定义操作接口
interface op {
    int operator(int a, int b);

}
/*
结果:
add:3
div:2
*/

在创建线程时可以使用lambda表达式

在使用spark大数据框架中也可以使用lambda表达式

等等

让Lambda表达式更加简洁——方法引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Lambda表达式Java 8引入的一个新特性,它可以被视为一种匿名函数,它没有名称,但有参数列表、函数体和可能的返回型。Lambda表达式是一种简便的语法形式,用于表示Java的函数式接口。 Lambda表达式的语法形式如下: ``` (parameters) -> expression ``` 或者 ``` (parameters) -> { statements; } ``` 其,parameters表示参数列表,可以为空或包含一个或多个参数;箭头->用于分隔参数列表和Lambda表达式的主体;expression或statements表示Lambda表达式的主体,可以是一个表式或一组语句。 以下是一些Lambda表达式的示例: ``` // 无参数的Lambda表达式 () -> System.out.println("Hello, world!"); // 一个参数的Lambda表达式 (x) -> x * x // 多个参数的Lambda表达式 (x, y) -> x + y // 包含多条语句的Lambda表达式 (x, y) -> { int sum = x + y; System.out.println("The sum is " + sum); return sum; }; ``` Lambda表达式通常与Java的函数式接口一起使用,函数式接口是只有一个抽象方法的接口。例如,以下是一个函数式接口及其使用的示例: ``` @FunctionalInterface interface MyFunction { int apply(int x, int y); } MyFunction add = (x, y) -> x + y; MyFunction subtract = (x, y) -> x - y; int result1 = add.apply(2, 3); // result1 = 5 int result2 = subtract.apply(5, 2); // result2 = 3 ``` 在此示例,我们定义了一个带有一个抽象方法apply的函数式接口MyFunction,并使用Lambda表达式实现该接口的单个方法。然后,我们创建了两个MyFunction实例来执行加法和减法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

臭屁虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值