用stream 流 过滤 出2个 list里面相同的 ID 并且去重 返回 包含重复元素 新的list
时间: 2025-01-06 08:51:32 浏览: 8
在Java中,你可以使用Stream API来过滤两个列表中的相同ID,并去除其中一个列表中的重复项,然后合并结果。以下是一个示例:
```java
import java.util.*;
import java.util.stream.*;
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
// 使用Stream联合两个流并按ID排序
Stream<Stream<Integer>> combinedStream = Stream.concat(list1.stream(), list2.stream()).sorted();
// 过滤出相同的ID
List<Integer> uniqueIds = combinedStream.flatMapToInt(id -> {
List<Integer> duplicates = new ArrayList<>();
if (!duplicates.contains(id)) { // 如果id未存在,则添加到结果
duplicates.add(id); // 添加当前id到duplicates
return combinedStream.filter(otherId -> otherId.equals(id)).mapToInt(Stream::count); // 计算其他id的数量
} else {
return IntStream.of(0); // 如果id已存在,则返回长度为0的流,不会增加重复
}
}).filter(count -> count > 1) // 只保留计数大于1的id,即有重复的
.mapToInt(id -> id) // 将每个重复ID映射回其自身
.distinct() // 去除重复
.toList(); // 转换为列表
System.out.println(uniqueIds); // 输出包含重复元素的新list
阅读全文