在日常开发中,我们经常需要将两个列表(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
值并将列表合并到一个新的列表中。这种方法不仅代码简洁,还提高了可读性,非常适合在实际开发中使用。