首页 > 编程语言 >JAVA8-Lambda表达式

JAVA8-Lambda表达式

时间:2024-03-28 20:30:38浏览次数:31  
标签:Java 函数 接口 参数 JAVA8 表达式 Lambda

Lambda表达式是Java 8中引入的一项特性,它提供了一种简洁的方法来表示只有一个方法的接口(即函数式接口)的实例。Lambda表达式通常用于创建匿名方法。这种表达式是函数式编程的核心,允许开发者写出更简洁、更灵活的代码。

Lambda表达式的结构

Lambda表达式的一般形式是 (参数列表) -> { 表达式或代码块 }。其中:

  • 参数列表:与一个方法的参数列表相似,可以是零个或多个参数。参数的类型可以明确声明,也可以由编译器通过上下文推断得出。
  • 箭头符号 ->:标志着Lambda的开始。
  • 表达式或代码块:如果Lambda体只有一个表达式,那么可以不用花括号 {},且该表达式的结果会被自动返回。如果Lambda体是一个代码块,那么必须用{}包围,并且需要显式使用 return 语句来返回结果(当需要返回值时)。

Lambda表达式的示例

以下是一些Lambda表达式的例子:

  • 无参数,仅执行一个表达式:

    () -> System.out.println("Hello, World!");
    
  • 一个参数,执行单一表达式:

    (String name) -> System.out.println("Hello, " + name);
    // 或者省略参数类型
    name -> System.out.println("Hello, " + name);
    
  • 多个参数,执行代码块:

    (int a, int b) -> {
        int sum = a + b;
        return sum;
    };
    
  • 无需参数,返回一个值:

    () -> 42
    
  • 接受两个int类型的参数并返回它们的乘积:

    (int a, int b) -> a * b
    

Lambda表达式与函数式接口

Lambda表达式通常与函数式接口一起使用。函数式接口是只有一个抽象方法(但可能有多个默认或静态方法)的接口。Java 8提供了@FunctionalInterface注解来标示一个接口是函数式接口。标准库中的java.util.function包提供了一系列的函数式接口。

例如,java.util.function.Predicate<T>接口是一个函数式接口,它定义了一个名为test的方法,该方法接受一个参数并返回一个布尔值:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

你可以使用Lambda表达式提供Predicate的实现,例如:

Predicate<String> isNotEmpty = s -> !s.isEmpty();

Lambda表达式的好处

  • 简洁性:Lambda表达式让代码变得更加简洁和清晰。
  • 易读性:减少了模板代码,使得实际执行的操作更容易理解。
  • 函数式编程:Lambda表达式强化了Java的函数式编程能力。
  • 便捷的集合操作:结合Java 8的Stream API,Lambda表达式使得对集合进行操作和转换变得更加便捷。

注意事项

  • Lambda表达式可以访问其外部作用域的变量,但这些变量必须是事实上的final(即它们在初始化后不会再被修改)。
  • Lambda表达式在Java中是对象,它们必须关联一个具体的函数式接口。
  • 在使用Lambda表达式时,如果遇到复杂的逻辑或代码可读性变差,应考虑使用传统的匿名内部类或单独的方法。

Lambda表达式是Java 8中的关键增强之一,它们有效地简化了Java编码标

标签:Java,函数,接口,参数,JAVA8,表达式,Lambda
From: https://blog.csdn.net/guanglihuan/article/details/137003921

相关文章

  • C# Lambda Mapper
    场景在业务开发中,从仓储至应用,中间一般还有一层模型映射服务,其中的核心主键俺管他叫映射器(Mapper)。现在业界已经有很多Mapper的实现方案了,多为自实现如反射同名映射,或者使用大名鼎鼎的AutoMapper。AutoMapper底层是有一些优化的,比很多自实现的反射同名映射要快,反射会占用大量时......
  • 正则表达式的贪婪模式与非贪婪模式
    正则表达式中的贪婪模式和非贪婪模式(也称为勉强模式或懒惰模式)是量词行为的两种不同模式。这些模式影响正则表达式如何匹配字符串中的字符序列。贪婪模式(Greedy)贪婪模式是正则表达式的默认行为。在贪婪模式下,正则表达式会尽可能多地匹配字符。它会尝试匹配尽可能长的字符串片......
  • On Java8读书笔记
    ObjectsEveryWhere使用Reference掌控对象掌控一个对象有两种不同的方式:直接掌控变量本身or间接掌控一个"通道",通过"通道"可以掌控对象在Java中,我们通过间接的方式掌控对象,而这个"通道"就是ReferenceReference不同于对象本身,对象本身往往是"臃肿的"(对象内包括字段和......
  • 16使用正则表达式处理字符串
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • Csharp中表达式树
    Csharper中的表达式树这节课来了解一下表示式树是什么?在C#中,表达式树是一种数据结构,它可以表示一些代码块,如Lambda表达式或查询表达式。表达式树使你能够查看和操作数据,就像你可以查看和操作代码一样。它们通常用于创建动态查询和解析表达式。一、认识表达式树为什么要这样说?......
  • AOP中的execution表达式
    文章目录前言一、知识讲解?1AOP是什么?2execution表达式二、使用execution表达式1.execution表达式2使用示例总结前言提示:这里可以添加本文要记录的大概内容:在学习Spring中,必然要学习AOP,那么execution表达式有是必不可少的。提示:以下是本篇文章正文内容,下面案......
  • Java8递归生成树
    @Data@BuilderpublicclassMenu{/***id*/publicIntegerid;/***名称*/publicStringname;/***父id,根节点为0*/publicIntegerparentId;/***子节点信息*/publicList<Menu>......
  • Cron 表达式解析
    Cron表达式解析Cron表达式是一种强大的工具,用于在特定时间自动执行计划任务。无论是在服务器维护、数据库备份,还是在发送定时邮件等场景,cron表达式都能提供精确的时间控制。Cron表达式的基本结构Cron表达式由6或7个由空格分隔的时间字段组成,每个字段代表了不同的时间单位:......
  • lambda 表达式
    JDK1.8的新特性创建一个匿名内部类,lambda简洁一些实际是如何删减的初步认识总结:只有一个参数的lambda表达式注意:1.参数名字可以随便起2.参数的类型可以省略---》因为上下文有类型推断3.参数只有一个的话,()可以省略有两个参数和返回值的lambda表达式原始的新的:......
  • 正则表达式
    字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹......