JavaLambda表达式的简介与用法
Java Lambda表达式是Java 8中的新特性,它允许我们将函数作为方法参数(也就是函数式接口)来使用,并且产生更为简洁的代码。Lambda表达式使得代码更易读、易写,更加简洁明了,同时也促进了代码的重用性与可维护性。本文将介绍Lambda表达式的语法规则和用法,以及在Java开发中常用的Lambda表达式示例。
语法规则
Lambda表达式由三个部分组成:
1.(参数列表):可以为空,也可以包含一个或多个参数类型和名称。
2. ->符号:Lambda运算符,它表示参数列表与Lambda表达式主体的分隔符。它也可以叫做箭头符号。
3. Lambda表达式主体:可以是一个语句块,也可以是一个表达式。
Lambda表达式可以使用在函数式接口中,函数式接口中只有一个抽象方法,所以Lambda表达式可很方便地替换成一个方法体。
使用Lambda表达式的好处
1.简洁:Lambda表达式的语法简洁明了,省去了很多传统Java开发中繁琐的写法。
2.提升代码可读性:使用Lambda表达式不仅代码更简洁,还很容易加强代码的可读性。
3.提升代码的可维护性:Lambda表达式的简洁明了也可以可提升代码的可维护性,因为代码更加易于理解,修改与重构。
Lambda表达式示例
以下是一些常用的Lambda表达式示例:
1. Lambda表达式实现Runnable接口
通常,在Java中我们实现一个线程需要写一个新的类并实现一个Runnable 接口,并且实现它的run方法。但是使用Lambda表达式,我们可以通过我们向Thread 构造函数中传递一个 lambda表达式来创建一个线程。
例如,下面是使用Lambda表达式实现Runnable接口:
Runnable r = () -> {
System.out.println("Lambda expressions");
};
2. Lambda表达式实现Comparable接口
Java中的Arrays.sort()方法允许我们将数组排序。但是在对自定义对象进行排序时,我们需要让对象实现Comparable 接口。使用Lambda表达式,我们可以直接在sort()方法中定义比较器。
例如,考虑一个Person对象实现Comparable接口使用Lambda表达式的示例:
class Person implements Comparable<Person> {
private String firstName, lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFullName() {
return firstName + " " + lastName;
}
@Override
public int compareTo(Person other) {
return firstName.compareTo(other.firstName);
}
}
public class LambdaExample {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Joe", "Smith"),
new Person("Alice", "Jones"),
new Person("Bob", "Johnson")
);
Collections.sort(people, (p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()));
people.forEach(person -> System.out.println(person.getFullName()));
}
}
3. Lambda表达式实现Supplier接口
Java中的Supplier接口用于提供一个生成数据的方法(对象)。我们可以使用Lambda表达式很方便地实现Supplier接口。
例如,一个随机生成数字的示例:
public class LambdaExample {
public static void main(String[] args) {
Supplier<Double> randomSupplier = () -> Math.random();
for (int i = 0; i < 5; i++) {
System.out.println(randomSupplier.get());
}
}
}
4. Lambda表达式实现Consumer接口
Java中的Consumer接口用来对带有参数的方法执行操作。使用Lambda表达式很容易地实现Consumer接口。
例如,下面是一个将字符串转换为大写的示例:
public class LambdaExample {
public static void main(String[] args) {
Consumer<String> toUpperCase = (s) -> System.out.println(s.toUpperCase());
List<String> names = Arrays.asList("John", "Jamie", "Sarah");
names.forEach(toUpperCase);
}
}
5. Lambda表达式实现Predicate接口
Java中的Predicate接口用来对某个对象做出固定的判断操作,其返回类型是一个布尔值。
例如,考虑一个在列表中查找特定文本值的示例:
public class LambdaExample {
public static void main(String[] args) {
Predicate<String> containsFred = (s) -> s.contains("Fred");
List<String> names = Arrays.asList("Bob", "Jamie", "Sarah", "Fred");
names.stream().filter(containsFred).forEach(System.out::println);
}
}
总结
本文介绍了Java Lambda表达式的语法规则以及在Java开发中的常用示例。使用Lambda表达式还有很多其他的用法,例如将Lambda表达式与Stream API一起使用。Lambda表达式简化了Java开发的很多操作,使得我们可以写出更简洁、更可读、更容易维护的代码。因此,在Java开发中使用Lambda表达式是一个不错的选择。
