JDK1.8中的lambda表达式

本文深入解析Lambda表达式在Java中的应用,涵盖从基本语法到高级用法的六个常见场景,包括无参数无返回值、单一参数无返回值、类型推断、参数小括号省略、多参数多语句及返回值、单语句简化等,为读者提供全面的Lambda使用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lambda表达式依赖于函数式接口

函数式接口——只有一个抽象方法
lambda表达式一共六种情况!总结如下

/**
 * lambda表达式
 * (o1,o2)->Integer.compare(o1,o2)
 * 格式:
 * -> :lambda操作符/箭头操作符
 * -> 右边:lambda体——重写的抽象方法的方法体
 * -> 左边:lambda形参列表——接口中的抽象方法的形参列表
 *使用:六种情况
 * 总结:
 * ->左边:lambda形参列表的参数类型可以省略(类型推断),如果lambda形参列表只有一个参数,其一对()也可以省略
 * ->右边:lambda体,一般是一对{}包裹,如果只有一条执行语句(可能是return语句),可以省略{}(可以省return)
 *lambda表达式的本质——作为接口的实例/对象
 * 接口要求:必须是函数式接口——只有一个抽象方法,创建实例的时候就不需要知道方法的名称,因为只有一个
 *
 */
public class Demo01 {
    //1:无参数,无返回值
    @Test
    public void test01(){
        //runnable接口的情况
        Runnable r1=new Runnable() {
            @Override
            public void run() {
                System.out.println("111");
            }
        };
        Runnable r2=()-> System.out.println("222");
        r1.run();
        r2.run();
    }
    //2:lambda需要一个参数,但是没有返回值
    @Test
    public void test02(){
        Consumer<String> con=new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("sss");

        Consumer<String> con1=(String s)-> System.out.println(s);
        con1.accept("xsas");
    }
    //3:数据类型可以省略,因为可以由编译器推断出,称为“类型推断”
    @Test
    public void test03(){
        Consumer<String> con1=(String s)-> System.out.println(s);
        con1.accept("xxxx");

        Consumer<String> con2=( s)-> System.out.println(s);
        con1.accept("yyyy");
    }
    //4:lambda若只需要一个参数的时候,参数的小括号可以省略不写
    @Test
    public void test04(){
        Consumer<String> con1=(String s)-> System.out.println(s);
        con1.accept("xxxx");

        Consumer<String> con2=s-> System.out.println(s);
        con1.accept("yyyy");
    }
    //5:lambda需要两个或以上的参数,多条执行语句,并且可以有返回值
    @Test
    public void test05(){
        Comparator<Integer> com=new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
        System.out.println(com.compare(11, 2));

        Comparator<Integer> com2=(o1,o2)->{
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };
        com2.compare(11,12);
    }
    //6:当lambda体只有一条执行语句的时候,return与大括号若有,都可以忽略——意思是只有一条执行语句,且
    //该执行语句是return语句,则大括号和return都可以省略,如果非return语句,则可以省大括号
    @Test
    public void test06(){
        Comparator<Integer> com=new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
        System.out.println(com.compare(11, 23));
        Comparator<Integer> com1=(o1,o2)-> o1.compareTo(o2);
        System.out.println(com1.compare(11, 23));
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值