java8 多个list取并集
时间: 2023-10-06 21:13:17 浏览: 80
可以使用Java8中的流(Stream)和flatMap操作,将多个List合并成一个,再使用distinct操作去重。
示例代码:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = Arrays.asList(2, 3, 4);
List<Integer> list3 = Arrays.asList(3, 4, 5);
List<Integer> result = Stream.of(list1, list2, list3)
.flatMap(Collection::stream)
.distinct()
.collect(Collectors.toList());
System.out.println(result); // 输出 [1, 2, 3, 4, 5]
```
这段代码中,首先使用Stream.of将多个List合并成一个流(Stream),再使用flatMap将每个List转换成它包含的元素的流,最后使用distinct操作去重,并使用Collectors.toList()将结果转换成List。
相关问题
Java实现多个时间段取并集
可以使用一个二维数组来表示多个时间段,每一行表示一个时间段,第一列表示开始时间,第二列表示结束时间。然后按照开始时间对所有时间段进行排序,依次遍历每个时间段,如果当前时间段和前一个时间段有重叠部分,则将它们合并成一个时间段,否则将当前时间段加入结果集。
以下是Java代码实现:
```java
public static int[][] mergeTimeIntervals(int[][] intervals) {
// 按照开始时间排序
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));
List<int[]> merged = new ArrayList<>();
for (int i = 0; i < intervals.length; i++) {
int[] curr = intervals[i];
if (merged.isEmpty() || merged.get(merged.size() - 1)[1] < curr[0]) {
// 没有重叠部分,直接加入结果集
merged.add(curr);
} else {
// 有重叠部分,合并时间段
merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], curr[1]);
}
}
return merged.toArray(new int[merged.size()][]);
}
```
测试:
```java
int[][] intervals = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};
int[][] merged = mergeTimeIntervals(intervals);
for (int[] interval : merged) {
System.out.println(Arrays.toString(interval));
}
// 输出:[1, 6], [8, 10], [15, 18]
```
list<Map>集合内的Map取并集去重
要实现集合内的Map取并集去重,可以按照以下步骤进行:
1. 定义一个新的HashMap用于存放去重后的结果。
2. 遍历集合内的每一个Map对象,获取其中的键值对。
3. 对于每一个键值对,检查新的HashMap中是否已经存在该键,如果不存在,则将该键值对存入新的HashMap中。
4. 如果已经存在该键,则比较该键对应的值是否相等,如果不相等,则将原来的值替换为集合中的新值。
5. 遍历完所有的Map对象后,新的HashMap中就存放了集合内所有Map的并集去重结果。
下面是Java代码示例:
```
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
// 假设list中已经存放了多个Map对象
Map<String, Object> result = new HashMap<String, Object>();
for (Map<String, Object> map : list) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (result.containsKey(key)) {
Object oldValue = result.get(key);
if (!oldValue.equals(value)) {
result.put(key, value);
}
} else {
result.put(key, value);
}
}
}
```
上述代码中,我们通过两层循环遍历了集合内所有的Map对象,依次取出每个Map中的键值对。对于每一个键值对,我们首先检查新的HashMap中是否已经包含该键,如果包含则进行值的比较,否则直接存储该键值对。最终,新的HashMap中就存放了集合内所有Map的并集去重结果。
阅读全文