Lambda表达式的简单使用以及需要注意的地方!!

本文深入探讨了Lambda表达式的使用技巧及注意事项,包括其格式、条件及如何替代匿名内部类。详细介绍了函数式接口的概念,以及如何利用Lambda表达式简化代码,提升编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式的简单使用以及需要注意的地方!!

1格式:
( ) -> { }
(参数…)-> {方法体}
注意:
1.当参数只有一个的时候,小括号可以省略不写
2.当方法体中的代码只有一句的时候,大括号可以省略不写
3.传入的参数,参数类型可以省略不写
4.可选的返回关键字return:如果主体只有一个表达式返回值则可以省略return和{}

2使用
条件:
接口中有且只能有一个抽象方法,默认方法静态方法不受影响
格式:
修饰符 interface 接口名称 {
[public abstract] 返回值类型 方法名称(可选参数信息);
// 其他
}
函数式接口
被@FunctionalInterface 注解标注的为函数式接口
该注解可用于一个接口的定义上,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。
注意:
即使没有@FunctionalInterface该注解满足有且只有一个抽象方法的接口都称为函数式接口

可传递的匿名函数(行为参数化)
自己的理解:Lambda表达式其实就是匿名内部类对象,表达式右边的部分会传递给方法体,所以也可以把Lambda表达式理解成”方法”

官方的定义:可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型。这个定义还是太模糊的,让我们从以下几个关键词慢慢道来。
匿名——我们说匿名,是因为它不像普通的方法那样有一个明确的名称:写得少而做得多!
函数——我们说它是函数,是因为Lambda函数不像方法那样属于某个特定的类。但和方法一样,Lambda有参数列表、函数主体、返回类型。
传递——Lambda表达式可以作为参数传递给方法或存储在变量中。
简洁——无需像匿名类那样写很多模板代码。

(1)不带参数
接口:
package com.bigdata.lambda;

@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod();
}

测试类:
package com.bigdata.lambda;

/**

  • @author Administrator

  • @date 2019/2/23 19:37

  • @description
    */
    public class testDemo {
    public static void main(String[] args) {

     //test(new MyFunctionalInterface() {
     //
     //    @Override
     //    public void myMethod() {
     //        System.out.println("匿名内部类输出");
     //    }
     //});
    
     //使用Lambda表达式代替上面的匿名内部类
     test(() -> System.out.println("lambda表达式输出"));
    

    }

    public static void test(MyFunctionalInterface my) {
    my.myMethod();
    }
    }

(2)带参数
接口
package com.bigdata.lambda;
/**

  • @author Administrator
  • @date 2019/2/23 19:36
  • @description
    */
    @FunctionalInterface
    public interface testInterface {
    void test(String str);
    }

测试类:
package com.bigdata.lambda;

/**

  • @author Administrator

  • @date 2019/2/23 20:02

  • @description
    */
    public class testDemo0 {
    public static void main(String[] args){
    test(“带参lambda测试”, new testInterface() {
    @Override
    public void test(String str) {
    System.out.println(str);
    }
    });

     //lambda表达式测试
     //test("带参lambda测试" ,(string)->System.out.println("带参lambda测试"));
    

    }
    public static void test(String str,testInterface testInterface){
    testInterface.test(str);
    }
    }

使用解析(自己理解):

内置函数

Consumer
消费型接口 T void 对类型为T的对象操作,
方法:void accept(T t)
Supplier
供给型接口 无 T 返回类型为T的对象,
方法:T get();可用作工厂
Function<T, R>
函数型接口 T R 对类型为T的对象操作,并返回结果是R类型的对象
方法:R apply(T t);
Predicate
断言型接口 T boolean 判断类型为T的对象是否满足条件,返回boolean值
方法boolean test(T t);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值