清洁地处理Java 8 Stream的"findFirst()"结果,即使是空的,可以使用O
pt
ional类来处理。
O
pt
ional类是Java 8中引入的,用于表示一个值的可选存在性。它可以包含一个非空的值,也可以为空。
以下是一个示例代码,演示如何使用O
pt
ional类处理"findFirst()"结果:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class StreamExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Tom");
Optional<String> firstName = names.stream()
.filter(name -> name.startsWith("J"))
.findFirst();
// 检查Optional是否包含值
if (firstName.isPresent()) {
System.out.println("First name starting with 'J': " + firstName.get());
} else {
System.out.println("No name starting with 'J' found");
// 使用orElse()方法提供默认值
String defaultName = firstName.orElse("Default");
System.out.println("First name or default: " + defaultName);
// 使用orElseGet()方法提供默认值的计算逻辑
String computedDefaultName = firstName.orElseGet(() -> {
// 在这里可以进行复杂的计算逻辑
return "Computed Default";
System.out.println("First name or computed default: " + computedDefaultName);
// 使用orElseThrow()方法抛出异常
try {
String name = firstName.orElseThrow(() -> new Exception("No name found"));
System.out.println("First name: " + name);
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
在上面的代码中,我们首先使用"findFirst()"方法获取Stream中满足条件的第一个元素。然后,我们使用Optional类的不同方法来处理这个结果:
使用isPresent()方法检查Optional是否包含值。
使用get()方法获取Optional中的值。
使用orElse()方法提供一个默认值,如果Optional为空。