Java 中 Lambda 表达式的使用

目录

[一、Lambda 表达式的概念](#一、Lambda 表达式的概念)

[二、Lambda 表达式的语法格式](#二、Lambda 表达式的语法格式)

[三、Lambda 表达式的案例使用](#三、Lambda 表达式的案例使用)

[1、使用 Lambda 来实现启动线程](#1、使用 Lambda 来实现启动线程)

[2、使用 Lambda 表达式实现集合的排序](#2、使用 Lambda 表达式实现集合的排序)

[3、使用 Lambda 表达式实现文件夹下的文件查找](#3、使用 Lambda 表达式实现文件夹下的文件查找)


一、Lambda 表达式的概念

Lambda 表达式是特殊的匿名内部类, 它是把函数作为一个方法的参数(函数作为方法参数传递),将代码像数据 一样传递。

二、Lambda 表达式的语法格式

lambda 表达式分为三部分 : () -> {}
() 表示接口种方法的形参, 根据参数类型去匹配接口中的方法来进行方法的实现。
-> 表示 箭头操作符,分隔参数列表和方法体
{} 表示方法体
使用lambda表示的注意事项
1、形参的类型可以推断,所以可以省略
2、如果方法的参数只有一个,()可以省略
3、如果参数列表为空,必须要写上()、
4、如果方法体中只有一行代码,大括号、分号、可以省,
如果有返回return也可以省 。但是要一起省
5、lambda表达式不会生成 class 文件

三、Lambda 表达式的案例使用

1、使用 Lambda 来实现启动线程

java 复制代码
//不使用 Lambda 表达式的写法
        new Thread(
                //以下是匿名内部类的实现
                new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类启动线程。。。");
            }
        }).start();

        // 使用 Lambda 表达式进行简化
        new Thread(() -> {
            System.out.println("匿名内部类启动线程。。。");
        }).start();
        
        // 最简版,因为方法体中只有一行代码,可以省略掉大括号和语句后面的分号
        new Thread(() -> System.out.println("匿名内部类启动线程。。。")).start();

2、使用 Lambda 表达式实现集合的排序

java 复制代码
        List<Integer> list = new ArrayList<>();
        //不使用 Lambda 表达式的写法
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                // 升序排列
                return o1 - o2;
            }
        });

        // 使用 Lambda 表达式进行简化
        Collections.sort(list, (Integer o1, Integer o2) -> {
            return o1 - o2;
        });

        /*最简版,因为形参的类型可以进行推断,所以形参类型可以省略,
        方法体中只有一行代码,可以省略掉大括号和语句后面的分号*/
        Collections.sort(list, (o1, o2) -> o1 - o2);

3、使用 Lambda 表达式实现文件夹下的文件查找

java 复制代码
        //指定文件夹
        File file = new File("D:\\bbb");
        if(!file.exists()){
            //如果文件夹不存在则进行创建
            file.mkdir();
            //给文件夹中添加新的文件,getAbsolutePath 通过绝对路径
            new File(file.getAbsolutePath()+"a.Java").createNewFile();
            //getPath 通过相对路径,创建文件
            new File(file.getPath()+"b.Java").createNewFile();
        }
        //查找文件夹中的符合要求的文件
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".Java");
            }
        });
        System.out.println(files.length);
        for (File f : files) {
            System.out.println(f.getName());
        }

        // 使用 Lambda 表达式进行简化
        file.listFiles((p) -> {
            return p.getName().endsWith(".Java");
        });

        //最简版,只有一个参数不需要 ()
        file.listFiles(p -> p.getName().endsWith(".Java"));
相关推荐
Ustinian_31030 分钟前
【C/C++】For 循环展开与性能优化【附代码讲解】
c语言·开发语言·c++
牵牛老人39 分钟前
Qt 插件开发全解析:从接口定义,插件封装,插件调用到插件间的通信
开发语言·qt
钮钴禄·爱因斯晨43 分钟前
AIGC浪潮下,风靡全球的Mcp到底是什么?一文讲懂,技术小白都知道!!
开发语言·人工智能·深度学习·神经网络·生成对抗网络·aigc
22jimmy2 小时前
JavaWeb(二)CSS
java·开发语言·前端·css·入门·基础
机器视觉知识推荐、就业指导4 小时前
面试问题详解五:Qt 信号与槽的动态管理
开发语言·qt
vvilkim5 小时前
Java主流框架全解析:从企业级开发到云原生
java·运维·云原生
MZ_ZXD0016 小时前
springboot汽车租赁服务管理系统-计算机毕业设计源码58196
java·c++·spring boot·python·django·flask·php
A 计算机毕业设计-小途6 小时前
大四零基础用Vue+ElementUI一周做完化妆品推荐系统?
java·大数据·hadoop·python·spark·毕业设计·毕设
岁忧8 小时前
(nice!!!)(LeetCode 每日一题) 679. 24 点游戏 (深度优先搜索)
java·c++·leetcode·游戏·go·深度优先
四维碎片10 小时前
【Qt】线程池与全局信号实现异步协作
开发语言·qt·ui·visual studio