【JAVA】Lambda表达式

Lambda表达式

Java中的Lambda表达式是Java 8引入的一项功能,它允许通过更简洁的语法来实现函数式编程。Lambda表达式是一个匿名函数(即没有名字的方法),它可以作为参数传递给方法,也可以赋值给变量。Lambda表达式的主要作用是简化代码,使得代码更加简洁和易于理解,特别是在使用像集合类这样的地方。

1. Lambda表达式的基本语法

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

(parameters) -> expression

(parameters) -> { statements; }
  • parameters:参数列表,类似于方法的参数列表。
  • ->:箭头操作符,分隔参数和表达式/代码块。
  • expression:表达式,或者是单个语句。
  • statements:代码块,包含多条语句。

2. 使用Lambda表达式的示例

2.1 无参数Lambda表达式

// 创建一个没有参数的Lambda表达式
Runnable r = () -> System.out.println("Hello, Lambda!");

// 启动线程执行Runnable
new Thread(r).start();

代码说明:

  • Runnable r = () -> System.out.println(“Hello, Lambda!”); 定义了一个Lambda表达式,它实现了Runnable接口的run方法。此Lambda表达式没有参数,只打印一条消息。
  • new Thread®.start(); 创建并启动了一个线程,该线程执行我们定义的Lambda表达式。

2.2 有参数的Lambda表达式

// 使用Lambda表达式定义一个带有参数的Comparator接口实现
Comparator<Integer> comparator = (a, b) -> a.compareTo(b);

// 比较两个整数
int result = comparator.compare(5, 10);

// 输出比较结果
System.out.println(result); // 输出:-1,表示5小于10

代码说明:

  • Comparator comparator = (a, b) -> a.compareTo(b); 定义了一个带有两个参数a和b的Lambda表达式,实现了Comparator接口的compare方法。
  • int result = comparator.compare(5, 10); 调用比较器,比较两个整数5和10。
  • System.out.println(result); 输出比较结果,-1表示前者小于后者。

2.3 带有代码块的Lambda表达式

// 使用Lambda表达式定义一个带有代码块的操作
Consumer<String> greeter = (name) -> {
    String greeting = "Hello, " + name + "!";
    System.out.println(greeting);
};

// 调用该操作
greeter.accept("World");

代码说明:

  • Consumer greeter = (name) -> { … }; 定义了一个Lambda表达式,接收一个字符串参数name,并打印一条问候消息。
  • greeter.accept(“World”); 调用了这个Lambda表达式,传入参数"World"。

3. Lambda表达式与函数式接口

Lambda表达式通常与函数式接口一起使用。函数式接口是仅包含一个抽象方法的接口。Java 8引入了@FunctionalInterface注解,用于标识函数式接口。

3.1 自定义函数式接口

// 使用@FunctionalInterface注解定义一个函数式接口
@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);
}

// 使用Lambda表达式实现该接口
MathOperation addition = (a, b) -> a + b;

// 调用Lambda表达式
int sum = addition.operate(5, 3);
System.out.println(sum); // 输出:8

代码说明:

  • @FunctionalInterface 标识了MathOperation是一个函数式接口。
  • MathOperation addition = (a, b) -> a + b; 使用Lambda表达式实现operate方法,实现了两个整数的加法操作。
  • int sum = addition.operate(5, 3); 调用该操作,计算5加3的结果并输出。

3.2 使用内置函数式接口

Java 8提供了许多常用的内置函数式接口,如Predicate、Function、Supplier和Consumer。

// 使用内置的Predicate函数式接口
Predicate<String> isLongString = (str) -> str.length() > 5;

// 测试字符串长度是否大于5
boolean result = isLongString.test("HelloWorld");
System.out.println(result); // 输出:true

代码说明:

  • Predicate isLongString = (str) -> str.length() > 5; 定义了一个Predicate,它接收一个字符串并返回一个布尔值,表示字符串长度是否大于5。
  • boolean result = isLongString.test(“HelloWorld”); 测试字符串"HelloWorld"的长度,结果为true。

4. 方法引用和构造器引用

Lambda表达式还可以通过方法引用和构造器引用进行简化。

4.1 方法引用

// 方法引用的使用
Consumer<String> printer = System.out::println;

// 调用方法引用
printer.accept("Hello, Method Reference!");

代码说明:

  • Consumer printer = System.out::println; 使用方法引用简化Lambda表达式,引用了System.out的println方法。
  • printer.accept(“Hello, Method Reference!”); 调用方法引用,输出字符串。

4.2 构造器引用

// 定义一个接口,表示对象的创建
interface ObjectCreator {
    MyClass create(String name);
}

// 使用构造器引用
ObjectCreator creator = MyClass::new;

// 调用构造器引用创建对象
MyClass obj = creator.create("Lambda");
System.out.println(obj.getName()); // 输出:Lambda

// 自定义的类
class MyClass {
    private String name;

    public MyClass(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

代码说明:

  • ObjectCreator creator = MyClass::new; 使用构造器引用简化对象的创建。
  • MyClass obj = creator.create(“Lambda”); 使用构造器引用创建MyClass对象。
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值