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));
    }
}
相关推荐
欧恩意23 分钟前
【Tools】Java反汇编工具推荐
java·汇编
寻星探路1 小时前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
lbb 小魔仙1 小时前
【Java】Java 实战项目:手把手教你写一个电商订单系统
android·java·python
星河耀银海1 小时前
Java安全开发实战:从代码防护到架构安全
java·安全·架构
青云交1 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市水资源管理与节水策略制定中的应用
java·java 大数据·java 大数据可视化·城市水资源管理·spark 数据清洗·echarts 热力图·管网漏损控制
紫陌涵光1 小时前
112. 路径总和
java·前端·算法
workflower2 小时前
多变量时间序列预测
java·hadoop·nosql·需求分析·big data·结对编程
Volunteer Technology2 小时前
DynamicTP动态线程池(四)
java·spring boot·后端·spring
野犬寒鸦2 小时前
从零起步学习并发编程 || 第九章:Future 类详解及CompletableFuture 类在项目实战中的应用
java·开发语言·jvm·数据库·后端·学习