两个List<User>相同UserId合并
时间: 2023-12-10 17:02:25 浏览: 97
两个List集合取相同重复数据的方法
可以使用 Java 8 的流式编程和 Lambda 表达式来实现。首先,将两个列表合并成一个,然后使用 Collectors.toMap() 方法将用户 ID 作为键,用户对象作为值,最后将 Map 的 values 转换为 List 即可。
下面是示例代码:
```java
List<User> list1 = new ArrayList<>();
list1.add(new User(1, "Alice"));
list1.add(new User(2, "Bob"));
List<User> list2 = new ArrayList<>();
list2.add(new User(2, "Bob"));
list2.add(new User(3, "Charlie"));
List<User> mergedList = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.toMap(User::getId, Function.identity(), (u1, u2) -> u1))
.values()
.stream()
.collect(Collectors.toList());
System.out.println(mergedList);
```
输出结果为:
```
[User{id=1, name='Alice'}, User{id=2, name='Bob'}, User{id=3, name='Charlie'}]
```
其中,User 类需要实现 equals() 和 hashCode() 方法,以便在合并 Map 中去重。在上述代码中,使用了一个简单的 lambda 表达式 `(u1, u2) -> u1` 来解决重复键的冲突,即保留第一个键值对。如果想保留最后一个键值对,可以使用 `(u1, u2) -> u2`。
阅读全文