- 基本语法形式(只有一个参数时)
- Lambda 表达式主要用于替代匿名内部类,特别是在使用函数式接口(只有一个抽象方法的接口)的时候。当接口的抽象方法只有一个参数时,基本形式如下:
- 语法:
(parameter) -> expression
- 例如,有一个函数式接口
MyFunction
,它有一个抽象方法apply
,接受一个整数参数并返回该整数加 1 后的结果。 - 首先定义函数式接口:
@FunctionalInterface public interface MyFunction { int apply(int x); }
- 然后使用 Lambda 表达式实现这个接口:
MyFunction addOne = (x) -> x + 1; System.out.println(addOne.apply(5));//输出6
- 多个参数的情况
- 语法:
(parameter1, parameter2,...) -> expression
- 例如,有一个函数式接口
Calculator
,它有一个抽象方法calculate
,接受两个整数参数并返回它们的和。 - 定义函数式接口:
@FunctionalInterface public interface Calculator { int calculate(int a, int b); }
- 使用 Lambda 表达式实现接口:
Calculator adder = (a, b) -> a + b; System.out.println(adder.calculate(3, 4));//输出7
- 语法:
- 带有语句块的 Lambda 表达式
- 当 Lambda 表达式中的逻辑不能用一个简单的表达式表示,而需要多条语句时,可以使用语句块。
- 语法:
(parameters) -> { statements; }
- 例如,有一个函数式接口
StringProcessor
,它的抽象方法process
接受一个字符串参数,将字符串转换为大写并在末尾添加一个感叹号。 - 定义函数式接口:
@FunctionalInterface public interface StringProcessor { String process(String input); }
- 使用 Lambda 表达式实现接口:
StringProcessor upperAndExclaim = (input) -> { String upperCase = input.toUpperCase(); return upperCase + "!"; }; System.out.println(upperAndExclaim.process("hello"));//输出HELLO!
- 方法引用(一种特殊的 Lambda 表达式写法)
- 方法引用是 Lambda 表达式的一种简洁写法,用于直接引用已经存在的方法。
- 例如,有一个
System.out.println
方法,它接受一个对象并打印它。如果有一个函数式接口Printer
,它的抽象方法print
接受一个字符串并打印它。 - 定义函数式接口:
@FunctionalInterface public interface Printer { void print(String s); }
- 可以使用方法引用
System.out::println
来实现这个接口:
Printer printer = System.out::println; printer.print("This is a method reference.");
- 这里
System.out::println
等价于(s) -> System.out.println(s)
。 - 还有其他类型的方法引用,如引用某个类的静态方法(
ClassName::staticMethodName
)、引用某个对象的实例方法(objectReference::instanceMethodName
)和引用某个类型的任意对象的实例方法(ClassName::instanceMethodName
)。例如,对于一个String
类的length
方法,可以使用String::length
作为方法引用来获取字符串长度的函数式接口实现。
lambda 表达式 介绍
最新推荐文章于 2025-05-28 15:51:16 发布