了解λ表达式

Lambda表达式(Lambda expression)是一个匿名函数,它基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction)。Lambda表达式是程序设计中的一个重要概念,尤其在支持函数式编程的语言中,如Java 8及以上版本、Python等。以下是对Lambda表达式的详细解释:

一、基本概念

  • 匿名性:Lambda表达式没有函数名,即它是一个没有名称的函数。
  • 函数性:尽管没有名称,但Lambda表达式具有参数列表、函数主体、返回类型,以及可能抛出的异常列表,因此它本质上是一个函数。
  • 传递性:Lambda表达式可以作为参数传递给方法或存储在变量中,这体现了其可传递性。

二、语法结构

Lambda表达式的语法结构通常包含三个部分:参数列表、箭头符号(->)和表达式体(或语句块)。

  • 参数列表:指定Lambda函数接受的参数。参数可以有零到多个,用逗号隔开,放在小括号中。
  • 箭头符号:箭头符号“->”用于分隔参数列表和表达式体。它表示将给定的参数映射到表达式体中进行计算。
  • 表达式体:指定Lambda函数执行的代码块,可以是任何有效的表达式或语句块。如果表达式体只有一条语句,且该语句有返回值,则可以省略大括号和return关键字;否则,必须使用大括号将多条语句括起来,并显式使用return语句返回结果。

三、用途

Lambda表达式的主要用途是作为函数式接口的实例。函数式接口是只有一个抽象方法的接口,它可以被Lambda表达式实现。Java 8提供了许多内置的函数式接口,如ComparatorRunnableFunction等。

四、示例

以下是一个简单的Lambda表达式示例:

List<String> list = Arrays.asList("apple", "banana", "orange");  
list.forEach(item -> System.out.println(item));

在这个示例中,Lambda表达式item -> System.out.println(item)被用作forEach方法的参数。这个Lambda表达式没有参数类型(因为Java编译器可以从上下文推断出参数类型),它接受一个字符串参数item,并打印出该字符串。

在力扣2023题连接后等于目标字符串的字符串对中题解中也使用到了λ表达式

  public int numOfPairs2(String[] nums, String target) {
            // 字符数组计数
            Map<String,Integer> countMap = new HashMap<>();
            for (String num : nums) {
                // λ表达式如果旧的值与新的值相等则将旧的值加1
                countMap.merge(num,1,(old,newValue)->old+1);
            }
            int ans =0;
            // 分解字符串,获取字符串枚举方案
            for (int i = 1; i < target.length(); i++) {
                String left = target.substring(0,i);
                String right = target.substring(i);
                if(left.equals(right)){
                    // 想不清楚就模拟咯 握手问题
                    ans+= countMap.getOrDefault(left,0)*(countMap.getOrDefault(right,0)-1);
                }else {//握手问题
                    ans+= countMap.getOrDefault(right,0)* countMap.getOrDefault(left,0);
                }
            }
            return ans;
        }

五、优点

Lambda表达式的优点包括:

  • 简洁性:Lambda表达式可以用更少的代码表达相同的功能,使代码更加简洁易读。
  • 功能性:它支持函数式编程风格,使得代码更加模块化、易于理解和维护。
  • 灵活性:Lambda表达式可以作为参数传递给方法或存储在变量中,增加了代码的灵活性和可重用性。

"生命之树常青,唯因不断学习之泉源不竭。"

这句名言寓意着,生命的活力和成长源自于我们持续不断地学习和探索。它鼓励我们认识到,通过不断学习新知识、新技能,以及不断反思和提升自我,我们的生命才能如同常青的树木一样,保持勃勃生机和不断进步。学习不仅让我们在知识上更加丰富,也让我们在精神上更加充实,成为更好的自己。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值