Java中的lambda表达式和方法引用
Java 8引入了lambda表达式和方法引用,这使得Java编程更加简洁和便捷。Lambda表达式是一个匿名函数,可以作为参数传递到方法中或被赋值给变量。方法引用则提供了一种简洁的方式来引用已存在的方法。
Lambda表达式
Lambda表达式由参数列表、箭头符号和方法体组成。举个例子,以下是一个使用lambda表达式的示例:
List<String> names = new ArrayList<>();
names.add("Tom");
names.add("Jerry");
names.add("Spike");
names.forEach(name -> System.out.println(name));
以上代码使用了lambda表达式来输出names列表中的每一个元素。箭头符号左侧的参数列表包含了方法参数,右侧是方法体。Lambda表达式非常简洁,可以减少冗余代码。
Lambda表达式可用于各种情况下。例如在集合类中使用:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(number -> System.out.println(number));
通过使用stream()可以对集合中的元素进行操作。并且可以配合其他的lambda表达式一起使用,例如排序:
numbers.sort((n1, n2) -> n1.compareTo(n2));
numbers.forEach(System.out::println);
以上代码排序并输出集合内所有元素。
方法引用
方法引用提供了一种非常简洁的方式来引用已经存在的方法。它有多种形式,以下是一些例子。
静态方法引用:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(System.out::println);
以上代码输出集合中的每一个元素。
实例方法引用:
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
}
List<Person> people = Arrays.asList(
new Person("Tom", 25),
new Person("Jerry", 26),
new Person("Spike", 27)
);
people.stream().map(Person::getName).forEach(System.out::println);
以上代码从集合中获取每一个Person对象的名字,并输出到控制台上。
构造方法引用:
public class Person {
String name;
int age;
public Person() {
this.name = "Unknown";
this.age = 0;
}
}
Supplier<Person> supplier = Person::new;
Person p = supplier.get();
以上代码实例化一个Person对象。
总结
Lambda表达式和方法引用是Java 8新增的非常强大的特性,它们使得Java编程更加简洁、易读和易写。在函数式编程中,Lambda表达式特别有用,通过它可以轻松地编写匿名函数,简化代码。而方法引用则更加便捷,可以大大减少代码重复性。
