Java中的lambda表达式:什么是它,如何使用它
引言
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接口、过滤集合、遍历集合等场景。
