📅  最后修改于: 2023-12-03 15:01:28.248000             🧑  作者: Mango
Java 8 添加了许多新的方法和函数式接口,这些方法和接口可以在编写 Java 8 代码时发挥作用。本文将介绍一些常用的 Java 8 方法和函数式接口。
Java 8 添加了一种新的语法叫做方法引用。方法引用允许你直接引用类或对象中的方法作为 lambda 表达式。方法引用分为四种类型:
Class::staticMethod
instance::method
Class::new
Type[]::new
下面是一个例子:
List<String> names = Arrays.asList("bob", "alice", "charlie");
// Lambda 表达式写法
names.stream().map(name -> name.toUpperCase())
// 方法引用写法
names.stream().map(String::toUpperCase)
这两种写法是等效的。
Java 8 中引入了新的 Stream API,它允许你以一种类似于 SQL 查询的方式对集合进行操作。Stream API 是一种基于管道(pipeline)的处理方式,可以通过链式调用方法来实现多个操作。
下面是一个例子:
List<String> names = Arrays.asList("bob", "alice", "charlie");
long count = names.stream()
.filter(name -> name.length() > 4)
.count();
System.out.println("Names with length > 4: " + count);
这里使用了 filter
和 count
两个方法来实现了对集合的过滤,并统计符合条件的元素的个数。
Java 8 中引入了新的 Optional 类型,它可以包装任意类型的值,并提供了一些操作方法来判断是否存在值。使用 Optional 可以避免出现空指针异常(NullPointerException)。
下面是一个例子:
Optional<String> maybeName = Optional.ofNullable(null);
if (maybeName.isPresent()) {
String name = maybeName.get();
System.out.println("Hello, " + name + "!");
} else {
System.out.println("Hello, stranger!");
}
这里使用了 ofNullable
方法来创建一个 Optional 对象,并使用 isPresent
和 get
方法来判断是否存在值和获取包装的值。
Java 8 引入了许多新的函数式接口,它们是一种通过方法引用或 lambda 表达式传递行为的方式。
下面是一些常用的函数式接口:
下面是一个例子:
List<String> names = Arrays.asList("bob", "alice", "charlie");
Predicate<String> startsWithB = name -> name.startsWith("b");
names.stream().filter(startsWithB).forEach(System.out::println);
这里使用了 Predicate
接口来过滤集合中以 "b" 开头的元素,并使用 forEach
方法来打印符合条件的元素。
Java 8 的新特性让程序员可以更加轻松地编写并发和函数式编程,同时也提高了代码的可读性和可维护性。希望本文对您有所帮助!