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));
    }
}
相关推荐
步行cgn2 小时前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
大帅点兵2 小时前
Apache Ant 1.9.9 完整讲解
java
LuTshoes3 小时前
spring ai 实战 手搓 PlaneExecuteAgent
java·人工智能·spring·ai
这料鬼有毒3 小时前
二刷hot100-73.矩阵置零
java
caoerzhong3 小时前
JeeWMS 开源仓库管理系统二次开发与接口对接实战:Java WMS 如何与 ERP、MES 和自动化设备打通
java·开源
长谷深风1113 小时前
评测AI Agent:三种裁判各司其职
java·大数据·开发语言·人工智能·ai agent
边境悍匪3 小时前
蜗牛学苑 Java 智能体学习 Day42|项目周开发技术汇总 1 思维导图复盘
java·开发语言·spring boot·学习·spring
槑有烦恼4 小时前
Java 字符串 & List集合 高频易错真题复盘(含全部错题+修正)
java
语戚4 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
君顾14 小时前
本地托管机构管理源码实战:需求拆解、数据建模与多端部署
java·开发语言·托管