当前位置:   article > 正文

Java-Lambda

Java-Lambda

1 Lambda表达式

  • lambda表达式可以理解为对匿名内部类的一种简化 , 但是本质是有区别的

  • 面向对象思想 :

    • 强调的是用对象去完成某些功能

  • 函数式编程思想 :

    • 强调的是结果 , 而不是怎么去做

1 函数式接口

  • 只有一个抽象方法需要重写的接口,函数式接口。函数式接口是允许有其他的非抽象方法的存在例如静态方法,默认方法,私有方法。

  • 为了标识接口是一个函数式接口,可以在接口之上加上一个注解: @FunctionalInterface 以示区别

  • 在JDK中 java.util.function 包中的所有接口都是函数式接口。我们之前学习线程时学习的Runnable也是函数式接口

2 Lambda表达式的使用

  • 使用前提

    • 必须存在一个接口

    • 接口中有且只有一个抽象方法

  • 格式 : ( 形式参数 ) -> { 代码块 }

    • 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可

    • ->:由英文中画线和大于符号组成,固定写法。代表指向动作

    • 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容

2-举例

1. 使用 Lambda 表达式实现一个简单的函数式接口

假设有一个函数式接口 GreetingService,它只包含一个抽象方法 sayMessage

  1. @FunctionalInterface
  2. interface GreetingService {
  3. void sayMessage(String message);
  4. }

使用 Lambda 表达式来实例化该接口: 

  1. public class LambdaExample {
  2. public static void main(String[] args) {
  3. // 使用 Lambda 表达式实现 GreetingService 接口
  4. GreetingService greetService = message -> System.out.println("Hello " + message);
  5. // 调用函数式接口的方法
  6. greetService.sayMessage("World");
  7. }
  8. }

2. 使用 Lambda 表达式对集合进行迭代操作

假设有一个字符串列表,我们想要打印出列表中每个字符串的内容:

  1. import java.util.Arrays;
  2. import java.util.List;
  3. public class LambdaExample {
  4. public static void main(String[] args) {
  5. List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
  6. // 使用 Lambda 表达式对集合进行迭代
  7. names.forEach(name -> System.out.println("Hello, " + name));
  8. }
  9. }

 

3. 使用 Lambda 表达式实现多线程

通过 Lambda 表达式可以简化线程的创建和管理:

  1. public class LambdaExample {
  2. public static void main(String[] args) {
  3. // 使用 Lambda 表达式创建一个新线程
  4. new Thread(() -> System.out.println("Hello from thread!")).start();
  5. }
  6. }

4. 使用 Lambda 表达式进行条件过滤

假设有一个整数列表,我们想要筛选出所有的偶数:

  1. import java.util.Arrays;
  2. import java.util.List;
  3. import java.util.stream.Collectors;
  4. public class LambdaExample {
  5. public static void main(String[] args) {
  6. List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  7. // 使用 Lambda 表达式进行条件过滤
  8. List<Integer> evenNumbers = numbers.stream()
  9. .filter(n -> n % 2 == 0)
  10. .collect(Collectors.toList());
  11. System.out.println("Even numbers: " + evenNumbers);
  12. }
  13. }

 Lambda 表达式通过简洁的语法和函数式接口的支持,使得 Java 编程在处理集合操作、事件处理等方面变得更加灵活和高效。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/865024
推荐阅读
相关标签
  

闽ICP备14008679号