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));
    }
}
相关推荐
sg_knight17 分钟前
Spring Cloud与RabbitMQ深度集成:从入门到生产级实战
java·spring boot·spring·spring cloud·消息队列·rabbitmq·stream
Chan161 小时前
批处理优化:从稳定性、性能、数据一致性、健壮性、可观测性五大维度,优化批量操作
java·spring boot·后端·性能优化·java-ee·intellij-idea·优化
行者阿毅1 小时前
langchain4j+DashScope (通义千问)文生图
java·ai作画
Bug退退退1231 小时前
Java 网络流式编程
java·服务器·spring·sse
IT机器猫1 小时前
RabbitMQ
java·rabbitmq·java-rabbitmq
小杨的全栈之路1 小时前
冒泡、插入、选择、归并、堆排序:从名字由来到Java实现,一篇讲透
java·排序算法
yinke小琪1 小时前
面试官:谈谈为什么要拆分数据库?有哪些方法?
java·后端·面试
自由的疯1 小时前
java DWG文件转图片
java·后端·架构
小兔崽子去哪了1 小时前
EasyExcel 使用
java·excel
青云交1 小时前
Java 大视界 -- Java 大数据机器学习模型的对抗攻击与防御技术研究
java·机器学习模型·对抗攻击·java 大数据·防御技术·对抗训练·i - fgsm