当前位置: 首页 > article >正文

Lambda 表达式的语法:

在 Java 中,Lambda 表达式(也称为匿名方法)是一种简洁的表示方法接口(Functional Interface)实现的方式。它是 Java 8 引入的特性,目的是提高代码的简洁性和可读性。

Lambda 表达式的语法:

Lambda 表达式的基本语法结构如下:

(parameters) -> expression
  • parameters: 输入参数,类型可以省略,编译器会根据上下文推断。
  • ->: Lambda 表达式的箭头符号,用于分隔参数和方法体。
  • expression: 方法体,方法体可以是一个简单的表达式或者是一个代码块。

Lambda 表达式的主要特征:

  1. 简化代码:使代码更加简洁。
  2. 支持函数式编程:Lambda 表达式使得 Java 可以实现函数式编程。
  3. 支持传递行为:Lambda 让代码行为可以作为参数传递。

Lambda 表达式的基本用法

Lambda 表达式通常用于实现 Java 中的 函数式接口(Functional Interface)。函数式接口是只包含一个抽象方法的接口,例如:RunnableComparatorCallable 等。

示例 1: 使用 Lambda 表达式替代匿名内部类

我们首先看一个使用匿名内部类的代码示例,然后用 Lambda 表达式进行简化。

1.1. 匿名内部类示例:

假设我们有一个 Runnable 接口的实例,用来创建一个线程。

public class LambdaExample {
    public static void main(String[] args) {
        // 使用匿名内部类实现Runnable接口
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello from the thread!");
            }
        };
        
        // 创建线程并启动
        Thread thread = new Thread(runnable);
        thread.start();
    }
}
1.2. 使用 Lambda 表达式简化:

Lambda 表达式可以将上述匿名内部类简化为更简洁的形式:

public class LambdaExample {
    public static void main(String[] args) {
        // 使用 Lambda 表达式简化
        Runnable runnable = () -> System.out.println("Hello from the thread!");
        
        // 创建线程并启动
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

在这个例子中,Lambda 表达式 () -> System.out.println("Hello from the thread!") 替代了匿名内部类。

示例 2: 使用 Lambda 表达式处理集合(List)

Java 8 引入了流(Stream)API,可以非常方便地对集合进行操作。我们可以使用 Lambda 表达式和流 API 对集合进行过滤、排序和遍历等操作。

2.1. 传统方式:使用 for 循环遍历集合
import java.util.Arrays;
import java.util.List;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

        // 使用传统的 for 循环遍历集合
        for (String name : names) {
            System.out.println(name);
        }
    }
}
2.2. 使用 Lambda 表达式与 Stream API 遍历集合

使用 Lambda 表达式和 forEach 方法来遍历集合:

import java.util.Arrays;
import java.util.List;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

        // 使用 Lambda 表达式与 forEach 遍历集合
        names.forEach(name -> System.out.println(name));
    }
}

forEachStream 接口的一个方法,可以接受一个 Consumer 类型的参数,而 Consumer 接口只有一个方法 accept,所以我们可以传入 Lambda 表达式来替代匿名内部类。

示例 3: 使用 Lambda 表达式进行排序

Lambda 表达式可以用来简化比较器的实现。

3.1. 使用匿名内部类排序:
import java.util.Arrays;
import java.util.Comparator;

public class LambdaExample {
    public static void main(String[] args) {
        String[] names = {"Alice", "Bob", "Charlie", "David"};

        // 使用匿名内部类排序
        Arrays.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });

        System.out.println(Arrays.toString(names));
    }
}
3.2. 使用 Lambda 表达式排序:
import java.util.Arrays;

public class LambdaExample {
    public static void main(String[] args) {
        String[] names = {"Alice", "Bob", "Charlie", "David"};

        // 使用 Lambda 表达式排序
        Arrays.sort(names, (o1, o2) -> o1.compareTo(o2));

        System.out.println(Arrays.toString(names));
    }
}

示例 4: 函数式接口的使用

Java 8 引入了大量的函数式接口(例如 Predicate, Function, Consumer, Supplier 等)。我们可以通过 Lambda 表达式来实现这些接口。

4.1. 使用 Lambda 表达式实现 Predicate 接口

Predicate 接口用于判断某个条件是否成立,它有一个抽象方法 test

import java.util.function.Predicate;

public class LambdaExample {
    public static void main(String[] args) {
        // 使用 Lambda 表达式创建 Predicate 接口实例
        Predicate<Integer> isEven = num -> num % 2 == 0;

        System.out.println(isEven.test(4));  // true
        System.out.println(isEven.test(5));  // false
    }
}
4.2. 使用 Lambda 表达式实现 Function 接口

Function 接口用于将输入参数转换为输出结果,它有一个抽象方法 apply

import java.util.function.Function;

public class LambdaExample {
    public static void main(String[] args) {
        // 使用 Lambda 表达式创建 Function 接口实例
        Function<Integer, Integer> square = num -> num * num;

        System.out.println(square.apply(4));  // 16
        System.out.println(square.apply(5));  // 25
    }
}

小结:

  • Lambda 表达式使代码更加简洁。
  • 适用于实现 函数式接口,即只有一个抽象方法的接口。
  • Lambda 表达式可以替代匿名内部类,使得代码更加简洁易懂。
  • Java 8 的 Stream API 与 Lambda 表达式结合,可以非常方便地处理集合。

通过这些示例,你可以看到如何在 Java 中使用 Lambda 表达式提高代码的简洁性和可读性。


http://www.kler.cn/a/592252.html

相关文章:

  • 高频SQL 50 题(持续更新)
  • 企业年度经营计划制定与管理方法论(124页PPT)(文末有下载方式)
  • Java:读取中文,read方法
  • WebAssembly 技术在逆向爬虫中的应用研究
  • 网络安全漏洞与修复 网络安全软件漏洞
  • 从位置编码开始手搓transformer框架,transfromer讲解
  • DeepSeek算力服务器的选型--青岛佰优联创新科技有限公司
  • HTML语言的贪心算法
  • Golang | 每日一练 (6)
  • 植物知识分享论坛毕设
  • 【QA】CRTP在模板中有哪些用处?
  • Ollama + Open WebUI 本地部署DeepSeek
  • test_cases测试用例层/test_1_login
  • 2023 CSP-J 题解
  • 蓝桥杯练习day2:执行操作后的变化量
  • redis分布式锁实现Redisson+redlock中watch dog是如何判断当前线程是否持有锁进行续租的呢?
  • 事务隔离级别是?
  • kotlin 中的构造函数的作用
  • 黑盒问题的操作优化
  • TPAMI-2025 | 中山大学具身导航参数高效训练!NavCoT:通过解耦推理提升基于大模型的视觉语言导航