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));
    }
}
相关推荐
程序员小假10 分钟前
HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·后端
Mr数据杨13 分钟前
【Codex】用教案主体模块沉淀标准化教学设计内容
java·开发语言·django·codex·项目开发
苍煜20 分钟前
RocketMQ系列第三篇:Java原生基础使用实操,手把手写生产者消费者Demo
java·rocketmq·java-rocketmq
Andya_net1 小时前
Java | Java内存模型JMM
java·开发语言
182******20831 小时前
2026年java后端还有机会吗?还能找到工作吗?
java·开发语言
XS0301062 小时前
Java基础 map集合
java·哈希算法·散列表
凤山老林2 小时前
从0到1搭建企业级权限管理系统:Spring Boot + JWT + RBAC实战指南
java·spring boot·后端·权限管理·rbac
逍遥德2 小时前
AI时代,计算机专业大学生学习指南
java·javascript·人工智能·学习·ai编程
Maiko Star3 小时前
让 AI 开口说话:Spring AI Alibaba 语音合成(TTS)实战
java·人工智能·spring·springai
programhelp_3 小时前
Pinterest OA 题库大公开|Programhelp 独家整理(最新高频)
java·开发语言