Lambda表达式

本文详细介绍了Java中的Lambda表达式,包括其语法、函数式接口的定义以及变量捕获的概念。通过示例展示了Lambda在forEach操作、列表排序以及HashMap遍历中的应用,强调了Lambda表达式的简洁性和实用性。
摘要由CSDN通过智能技术生成

Lambda表达式

Lambda 表达式(Lambda expression)可以看作是一个匿名函数。

1.Lambda表达式的语法

基本语法: (parameters) -> expression 或 (parameters) ->{ statements; }
Lambda表达式由三部分组成

  • 1.paramaters类似于方法中形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可以不声明而由JVM隐含判断。另外当只有一个推断类型时可以省略掉圆括号。
  • 2.->:可以理解为“被用于”的意思
  • 方法体:可以是表达式也可以是代码块,是函数式接口里方法的实现。代码块可以返回一个值或者什么都不返回,这里的代码块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不返回。

2.函数式接口

  • 一个接口有且只有一个抽象方法

注意:

  • 1.如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口;
  • 2.如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。

3.变量捕获

@FunctionalInterface
interface NoParameterNoReturn {
	void test();
} 
public static void main(String[] args) {
	int a = 10;
	NoParameterNoReturn noParameterNoReturn = ()->{
		// a = 99; error
		System.out.println("捕获变量:"+a);
	};
	noParameterNoReturn.test();
}

4.演示Lambda表达式

4.1forEach演示
public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("hello");
        list.add("bit");
        list.add("word");
        list.add("lambda");

        list.forEach(s -> {
            System.out.println(s);
        });
    }

在这里插入图片描述

4.2List接口中sort()演示
public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("hello");
        list.add("bit");
        list.add("word");
        list.add("lambda");
        /*list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();//按照长度进行升序排序
            }
        });
        System.out.println(list);*/
        list.sort((o1,o2) -> o1.length()-o2.length());
        System.out.println(list);
    }
4.3HashMap的forEach接口演示
public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "hello");
        map.put(2, "bit");
        map.put(3, "hello");
        map.put(4, "lambda");
        map.forEach(new BiConsumer<Integer, String>() {
            @Override
            public void accept(Integer integer, String s) {
                System.out.println(integer+" "+s);
            }
        });

        System.out.println("Lambda表达式=========");
        map.forEach((k,v) -> {
            System.out.println(k+" "+v);
        });
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值