在日常开发中,我们经常需要将两个列表(List)合并成一个新的列表。这个任务看似简单,但如果其中一个或两个列表可能为 null,处理起来就需要注意一些细节。本文将介绍一种使用 Java 8 Stream API 的简洁方法来完成这一任务。
User 类定义
首先,我们需要一个 User 类,用于存储用户的基本信息:
public class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User{name='" + name + "', age=" + age + "}";}// Getters and setters can be added here if needed
}
合并列表的方法
我们使用 Java 8 的 Stream API 来合并两个可能为空的列表。这种方法非常简洁且易读。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {List<User> list1 = new ArrayList<>();list1.add(new User("Alice", 30));list1.add(new User("Bob", 25));List<User> list2 = null;List<User> mergedList = Stream.of(list1, list2).filter(list -> list != null).flatMap(List::stream).collect(Collectors.toList());System.out.println(mergedList);}
}
代码解析
-  创建两个列表: 我们首先创建了两个 List<User>对象,list1包含了一些用户数据,list2为null。List<User> list1 = new ArrayList<>(); list1.add(new User("Alice", 30)); list1.add(new User("Bob", 25));List<User> list2 = null;
-  使用 Stream.of()创建一个包含两个列表的流:Stream.of(list1, list2)将两个列表作为流的元素。Stream.of(list1, list2)
-  过滤 null值:filter(list -> list != null)过滤掉null的列表。.filter(list -> list != null)
-  平铺流: flatMap(List::stream)将每个列表中的元素平铺到一个统一的流中。.flatMap(List::stream)
-  收集结果: collect(Collectors.toList())将流中的元素收集到一个新的List<User>中。.collect(Collectors.toList());
运行结果
上述代码运行后,将输出合并后的列表:
[User{name='Alice', age=30}, User{name='Bob', age=25}]
总结
使用 Java 8 的 Stream API 可以简洁且高效地合并两个可能为 null 的列表。通过 Stream.of()、filter() 和 flatMap(),我们可以轻松地处理 null 值并将列表合并到一个新的列表中。这种方法不仅代码简洁,还提高了可读性,非常适合在实际开发中使用。