欢迎访问宙启技术站
智能推送

Java中的lambda表达式:什么是它,如何使用它

发布时间:2023-05-30 10:22:05

引言

Java 8版本中,引入了一种新的表达式语法——Lambda表达式。它使得代码更加简洁,且易于阅读和维护。Lambda表达式可以让Java代码实现函数式编程,也是Java 8的重要特性之一。

Lambda表达式简介

Lambda表达式是一种可以传递的代码块执行功能。它是一段在未来的某个时间点才被执行的代码,它可以被看作是一个匿名函数,可将Lambda表达式作为参数传递给方法或存储在变量中。Lambda表达式可以替换匿名内部类,使得代码更加简洁。

常规写法:

public class Demo {
   public static void main(String args[]) {
      int num = 10;

      // 使用匿名内部类
      GreetingService greetingService = new GreetingService() {
         @Override
         public void sayMessage(String message) {
            System.out.println("Hello " + message + "!");
         }
      };
      greetingService.sayMessage("World");

   }
}

interface GreetingService {
   void sayMessage(String message);
}

输出结果:Hello World!

Lambda表达式写法:

public class Demo {
   public static void main(String args[]) {
      int num = 10;

      // 使用Lambda表达式
      GreetingService greetingService = message ->
         System.out.println("Hello " + message + "!");
      greetingService.sayMessage("World");
   }
}

interface GreetingService {
   void sayMessage(String message);
}

输出结果:Hello World!

Lambda表达式的语法格式

Lambda表达式的语法格式如下:

(parameter list) -> { Lambda body }

例如,将Lambda表达式用在一个Runnable实例上:

Runnable r = () -> { System.out.println("Hello Lambda!"); };

Lambda表达式中的参数列表可以为空,如下所示:

() -> { System.out.println("Hello Lambda!"); };

当Lambda表达式的参数只有一个时,参数列表的括号可以省略,如下所示:

name -> System.out.println("Hello " + name + "!");

Lambda表达式也可以具有多个参数,需要用逗号(,)进行分隔,如下所示:

(int a, int b) -> { return a + b; };

Lambda表达式可以使用return语句返回一个值,并且可以省略return语句,如下所示:

(int a, int b) -> a + b ;

Lambda表达式可分为两种不同类型:无返回值和有返回值。

无返回值Lambda表达式的示例:

() -> System.out.println("Hello Lambda!");

有返回值Lambda表达式的示例:

() -> { return "Hello Lambda!"; }

Lambda表达式的应用举例

1. 使用Lambda表达式实现comparable接口

public class Person {
   private String name;
   private int age;

   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public int getAge() {
      return age;
   }

   public void setAge(int age) {
      this.age = age;
   }

   @Override
   public String toString() {
      return "Person{name='" + name + "', age=" + age + "}";
   }
}

List<Person> people = new ArrayList();
people.add(new Person("Mike", 25));
people.add(new Person("Tom", 18));
Collections.sort(people, (p1, p2) -> p1.getName().compareTo(p2.getName()));

2. 使用Lambda表达式过滤集合

List<String> languages = Arrays.asList("Java", "C#", "Python", "PHP", "Perl", "C++");
List<String> filteredLanguages = languages.stream()
                                           .filter(s -> s.startsWith("P"))
                                           .collect(Collectors.toList());

3. 使用Lambda表达式遍历集合

List<String> languages = Arrays.asList("Java", "C#", "Python", "PHP", "Perl", "C++");
languages.forEach(s -> System.out.println(s));

总结

Lambda表达式是Java 8的重要特性之一。通过Lambda表达式,可以使得Java代码更加简洁、易读和易于维护,它可以实现函数式编程,也可以替换匿名内部类。在实际应用中,Lambda表达式可以用于实现Comparator接口、过滤集合、遍历集合等场景。