Lambda表达式

Lambda表达式是JDK8引入的新特性,允许函数作为方法参数。它必须与函数式接口结合使用,接口需有且仅有一个抽象方法。文章通过创建函数式接口、匿名内部类和Lambda表达式的示例,解释了Lambda的基本语法和常见用法,包括比较器、过滤器和类型转换器接口的应用。
摘要由CSDN通过智能技术生成

目录

初识Lambda表达式

Lambda表达式的使用条件

函数式接口

Lambda表达式的入门使用

创建函数式接口

创建匿名内部类实现方式

Lambda表达式实现

Lambda表达式的语法格式

1、Lambda表达式的标准语法格式

 2、Lambda表达式的省略方式

Lambda常用接口

比较器接口

过滤器接口

类型转换器接口


初识Lambda表达式

Lambda表达式是JDK8开始后的一种新语法形式,Lambda允许把函数作为一个方法的参数,使用Lambda表达式可以写出更简洁、更灵活的代码,而其作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

Lambda表达式的使用条件

函数式接口

Lambda 表达式和 方法引用使用的前提!!!

JDK 1.8 版本以上有效

@FunctionalInterface 语法格式严格要求当前接口【有且只能有一个】尚未完成的 缺省属性为 public abstract 修饰方法。我们可以在任意函数式接口上使用@FunctionalInterface注解,这样做可以用于检测它是否是一个函数式接口。

Lambda表达式的入门使用

创建函数式接口


@FunctionalInterface
interface A {
	void test ();
}


创建匿名内部类实现方式

public static void main(String[] args) {
    /*
    1. 匿名内部类方式
     */
    testLambda(new A() {
        @Override
        public void test() {
            System.out.println("无参数返回值 匿名内部类对象方法实现");
        }
    });

}

/**
 * Lambda 测试方法,当前方法所需参数是 A 接口实例化对象,因为当前 A 接口
 * 是一个函数式接口,可以使用 Lambda 表达式解决问题
 *
 * @param a 函数式接口 A
 */
public static void testLambda(A a) {
    a.test();
}

Lambda表达式实现


    /*
    2. Lambda 表达式实现
    【分析】
        void test();
        接口方法【返回值】 void
        接口方法【参数】 无参数
     Lambda 格式
        () -> {大括号中无需返回值类型}
     */
    testLambda(() -> {
        System.out.println("Lambda 表达式初体验");
    });

    // 【注意】Lambda 表达式有且只有一行代码,可以省略大括号
    testLambda(() -> System.out.println("Lambda 表达式初体验"));

Lambda表达式的语法格式

1、Lambda表达式的标准语法格式

  • Lambda表达式在Java语言中引入了一个操作符“   ->   ”,该操作符被称为Lambda操作符或箭头操作符。它将Lambda分为两个部分:
  • 左侧:指定了Lambda表达式需要的所有参数
  • 右侧:制定了Lambda体,即Lambda表达式要执行的功能
Lambda表达式的书写格式:

(联想参数临时变量)->{
    执行任务的代码块
}

注:->是语法形式,无实际意义

 2、Lambda表达式的省略方式

1. 参数类型可以省略不写
2. 如果只有一个参数,参数类型可以省略不写,同时()也可以省略
3. 如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写(需要同时省略)

实例演示:

创建集合并添加元素


        //1创建集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("zhangsan");
        coll.add("lisi");
        coll.add("wangwu");

匿名内部类


        //2.利用匿名内部类的形式
        //底层原理
        //其实也会自己遍历集合,依次获取到每一个元素
        //把得到的每一个元素,传递给线面的accept方法
        //s依次表示集合中的每一个数据
        coll.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

Lambda表达式(只有一个参数


        //lambda表达式
        coll.forEach(s-> System.out.println(s));
   

两个参数

        //创建一个需要排序的数组
        Integer[] arr = {2, 4, 3, 5, 6, 1};

        //匿名内部类

        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });


        //lambda表达式

        Arrays.sort(arr, (Integer o1, Integer o2)->{
            return o2 - o1;
        });


        //lambda表达式简化版
        Arrays.sort(arr, (o1, o2) -> o2 - o1);

Lambda常用接口

比较器接口

@FunctionalInterface
interface Comparator<T> {
    /**
     * 比较器接口要求的方法,参数是泛型参数,用户指定类型
     *
     * @param o1 用户在使用接口时约束的泛型对应具体数据类型参数
     * @param o2 用户在使用接口时约束的泛型对应具体数据类型参数
     * @return 返回值为 int 类型,0 表示两个元素一致。
     */
    int compare(T o1, T o2);
}

过滤器接口

// 过滤器接口,判断器接口,条件接口
@FunctionalInterface
interface Predicate<T> {
    /**
     * 过滤器接口约束的方法,方法参数是用户使用时约束泛型对应具体数据参数
     * 返回值类型是 boolean 类型,用于条件判断,数据过来
     *
     * @param t 用户约束泛型对应的具体数据类型参数
     * @return boolean 数据,判断结果反馈
     */
    boolean test(T t);
}

类型转换器接口

// 类型转换器接口
@FunctionalInterface
interface Function<T, R> {
	R apply(T t);	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值