使用stream流获取list<User> list1和List<User> list2中list1和list2这两个user中name相同的list
时间: 2024-10-22 14:13:55 浏览: 17
JAVA JDK8 List获取属性列表
在Java中,你可以使用Stream API来合并两个`List<User>`并过滤出name相同的用户。首先,我们需要将两个列表转换为`Stream`,然后利用`Collectors.groupingBy`方法按照名字分组,并忽略那些在另一个列表中不存在的名字。最后,可以收集剩余的键值对(即名字相同的User),形成一个新的列表。以下是代码示例:
```java
List<User> combinedList = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.groupingBy(User::getName, Collectors.toList()));
List<User> sameNameUsers = combinedList.values().stream()
.filter(lst -> lst.size() > 1) // 如果某个名字有多个实例,则保留
.flatMap(List::stream)
.distinct() // 去除重复的User实例
.collect(Collectors.toList());
```
这个过程假设`User`类有一个`getName()`方法用于获取用户的姓名。`sameNameUsers`就是包含所有在两个列表中都有相同名字的User对象的新列表。
阅读全文