赞
踩
只有一个抽象方法需要重写的接口,函数式接口。函数式接口是允许有其他的非抽象方法的存在例如静态方法,默认方法,私有方法。
为了标识接口是一个函数式接口,可以在接口之上加上一个注解: @FunctionalInterface 以示区别
在JDK中 java.util.function 包中的所有接口都是函数式接口。我们之前学习线程时学习的Runnable也是函数式接口
使用前提
必须存在一个接口
接口中有且只有一个抽象方法
格式 : ( 形式参数 ) -> { 代码块 }
形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
->:由英文中画线和大于符号组成,固定写法。代表指向动作
代码块:是我们具体要做的事情,也就是以前我们写的方法体内容
假设有一个函数式接口 GreetingService
,它只包含一个抽象方法 sayMessage
:
- @FunctionalInterface
- interface GreetingService {
- void sayMessage(String message);
- }
使用 Lambda 表达式来实例化该接口:
- public class LambdaExample {
- public static void main(String[] args) {
- // 使用 Lambda 表达式实现 GreetingService 接口
- GreetingService greetService = message -> System.out.println("Hello " + message);
-
- // 调用函数式接口的方法
- greetService.sayMessage("World");
- }
- }
假设有一个字符串列表,我们想要打印出列表中每个字符串的内容:
- 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 表达式对集合进行迭代
- names.forEach(name -> System.out.println("Hello, " + name));
- }
- }
通过 Lambda 表达式可以简化线程的创建和管理:
- public class LambdaExample {
- public static void main(String[] args) {
- // 使用 Lambda 表达式创建一个新线程
- new Thread(() -> System.out.println("Hello from thread!")).start();
- }
- }
假设有一个整数列表,我们想要筛选出所有的偶数:
- import java.util.Arrays;
- import java.util.List;
- import java.util.stream.Collectors;
-
- public class LambdaExample {
- public static void main(String[] args) {
- List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
-
- // 使用 Lambda 表达式进行条件过滤
- List<Integer> evenNumbers = numbers.stream()
- .filter(n -> n % 2 == 0)
- .collect(Collectors.toList());
-
- System.out.println("Even numbers: " + evenNumbers);
- }
- }
Lambda 表达式通过简洁的语法和函数式接口的支持,使得 Java 编程在处理集合操作、事件处理等方面变得更加灵活和高效。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。