Lambda表达式

lambda表达式

lambda可以让java以函数式编程.

该特性是自JDK8之后推出的.

使用lambda可以方便快捷创建匿名内部类。

语法:

(参数列表)->{

方法体

}

使用lambda创建的匿名内部类实际所属的接口必须只能有一个方法.否则编译不通过.

lambda表达式第一种 无参数的写法

复制代码
public class LambdaDemo1 {

    public static void main(String[] args) {
        //例如原先需要创建线程任务
        Runnable r1=new Runnable() {
            @Override
            public void run() {
                System.out.println("hello");
            }
        };
        //现在可以这样 lambda表达式是编译器认可  JVM虚拟机不认可,也就是说编译器在编译时候给你加上去了
        Runnable r2=()->{
            System.out.println("hello");
        };
        //如果你的方法体里只有一句代码  还可以简化  连{}也可以不用写
        Runnable r3=()->System.out.println("hello");
        ;
    }
}

lambda表达式第二种 有参数的写法

复制代码
public class LambdaDemo2 {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("传奇");
        list.add("小泽老师");
        list.add("苍老师");
        System.out.println(list);
        //自然排序 要求集合内元素实现Comparable接口 对代码具有侵入性
        //Collections.sort(list);

        //建议定义比较器的方式进行排序  普通写法
//        Comparator<String> com=new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                return 0;
//            }
//        };

        //不需要写参数类型
        Comparator<String> com=(o1,o2)->{
            return o1.length()-o2.length();
        };

        //因为里面就一句话,因此{}也不需要写   但是注意:这里是return 有返回值的,如果不写{} 请把return也去掉
        Comparator<String> com2=(o1,o2)->  o1.length()-o2.length();


//        Collections.sort(list, new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                return 0;
//            }
//        });

        //那么可以这么写
        Collections.sort(list,(o1,o2)->o1.length()-o2.length() );
    }
}

Lambda表达式的经典用法:集合遍历

JDK8之后集合和Map都支持了一个新的方法:

foreach,可以使用lambda遍历集合元素.

由于该方法是集合自行提供的,那么在使用一个线程安全的集合或Map时,

该种遍历方式也是并发安全的(原迭代器模式不与集合方法互斥,并发需要自行维护)

复制代码
public class LambdaDemo3 {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");

        for(String str:list){
            System.out.println(str);
        }

        //JDK8支持的新方式
        list.forEach((item)-> System.out.println(item));

        Map<String,Integer> map=new HashMap<>();
        map.put("语文", 99);
        map.put("数学", 98);
        map.put("英语", 97);

        //遍历map时候是两个参数  分别是key和value
        map.forEach((a,b)-> System.out.println(a+":"+b));
    }
}
相关推荐
空谷有来人12 分钟前
Ubuntu22.04安装jdk17,配置环境变量
java·jdk
程序员雷欧32 分钟前
ThreadPoolExecutor 深度解析:从核心参数到源码实现的全面剖析
java·开发语言·jvm
谢尔登41 分钟前
分享一些我常用的Skill
java·人工智能·python·actionscript
AaronJonah1 小时前
企业级线程池 traceId 闭环:上下文传递与全链路追踪实战
java·线程池·traceid跨线程传递
程序员黑豆1 小时前
Java入门第一步:从零开始编写你的第一个Hello World程序
java·前端·ai编程
Jazz_z2 小时前
如何用Python将彩色PDF一键转为黑白(灰度)
java·python·pdf
青山木2 小时前
Hot 100 --- 在排序数组中查找元素的第一个和最后一个位置
java·数据结构·算法·leetcode
天空之外1362 小时前
Docker安装MySQL 8.4 LTS、Docker安装Redis 7.4.x、Docker安装MinIO
java·mysql·docker
fīɡЙtīиɡ ℡2 小时前
深入学习JAVA并发编程(上)
java·开发语言·学习
XS0301063 小时前
Spring AI:两种内置 Advisor 快速实现 RAG
java·人工智能·spring