Stream.of() + flatMap()
发布时间:2025-06-24 07:45:57 作者:北方职教升学中心 阅读量:625
:
Map<String, Integer> mergedMap = Stream.of(map1, map2) .flatMap(m -> m.entrySet().stream()) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, Integer::sum));System.out.println(mergedMap); // {A=1, B=5, C=4}。特点。
2.3。以下是常见合并集合方法的分类:
1.。:适用于现有集合场景的直接更新。
- 适用场景。
合并多个 List。 - 示例。
直接合并。: map2.forEach((key, value) -> map1.compute(key, (k, v) -> (v == null) ? value : v + value));System.out.println(map1); // {A=1, B=5, C=4}。:动态计算 key。
适用场景。 - 示例。
不修改原 Map。 Map。 ❌。 List。 - 示例。
List.copyOf()。
✅。: List<String> list3 = Arrays.asList("F", "G");List<String> mergedList = Stream.of(list1,
- 适用场景。
1.1。
❌。 addAll()。
❌。 - ✅ 修改原集合。
✅。 计算 key 值。 list2, list3) .flatMap(Collection::stream) .collect(Collectors.toList());System.out.println(mergedList); // [A, B, C, D, E, F, G]。 - 特点。
方法。 - 适用场景。
4.。
- 特点。
addAll()。
Stream.concat()。
Stream.of() + flatMap()。:返回。
1.4。
Stream.concat()。
❌。集合。 - 适用场景。
compute()。
合并相同 key。:不修改原 Map,生成新 Map。 - 适用场景。
- 示例。:合并多个 List。:流式操作,适用于不可变集合。 合并 Map。
不修改原 List。 3.。
merge()。
Stream.concat()。 不可变。 合并 Set。:两者直接合并 List。
- 示例。不可变集合场景。:直接合并 Map。
:修改原集合没有必要创建新的集合。Stream API。
putAll()。:
List<String> mergedList = Stream.concat(list1.stream(), list2.stream()) .collect(Collectors.toList());System.out.println(mergedList); // [A, B, C, D, E]。
- 适用场景。
- 特点。
3.3。 总结。
- 特点。
- 示例。
原集合是否修改。: List<String> mergedList = List.copyOf(Stream.concat(list1.stream(), list2.stream()) .collect(Collectors.toList()));System.out.println(mergedList); // [A, B, C, D, E]。
合并多个 Set。 putAll()。
1.2。
Java 合并(提供了多种方式;List、
✅。:适用于函数编程、Map),最合适的方法可以在不同的场景中选择。 - ❌ 原集合不修改。
- 示例。
创建不可变 List。:多个可以同时合并 List。:创建不可变 List。 merge()。:可指定 key 处理方式。
Set。: Set<Integer> mergedSet = Stream.concat(set1.stream(), set2.stream()) .collect(Collectors.toSet());System.out.println(mergedSet); // [1, 2, 3, 4, 5]。
3.2。
✅。 后者覆盖前者。 直接合并。 compute()。
Stream.of() + flatMap()。:不修改原集合返回新 List。:合并时重复处理 key。
3.4。:
List<String> list1 = new ArrayList<>(Arrays.asList("A", "B", "C"));List<String> list2 = Arrays.asList("D", "E");list1.addAll(list2);System.out.println(list1); // [A, B, C, D, E]。
- 适用场景。
addAll()。
Stream.of() + flatMap()。
3.1。
不修改原 Set。 这些方法适用于不同的开发需求,哪种方法取决于业务逻辑和性能要求。 合并 List。
- 适用场景。:原集合不修改。
- 示例。
1.3。
:Stream.concat()。
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5));set1.addAll(set2);System.out.println(set1); // [1, 2, 3, 4, 5]。
Stream.of() + flatMap()。
Stream API。
- 适用场景。:
Set<Integer> set3 = new HashSet<>(Arrays.asList(6, 7));Set<Integer> mergedSet = Stream.of(set1, set2, set3) .flatMap(Set::stream) .collect(Collectors.toSet());System.out.println(mergedSet); // [1, 2, 3, 4, 5, 6, 7]。
❌。: map2.forEach((key, value) -> map1.merge(key, value, Integer::sum));System.out.println(map1); // {A=1, B=5, C=4}。
- 示例。:合并多个 Set。:如果 key 存在,后者将覆盖前者。
- 特点。
2.1。:合并 Set(无重复元素)
- 示例。
✅。Set、 - 适用场景。
数据结构。 2.。
addAll()。
- 示例。:
Map<String, Integer> map1 = new HashMap<>();map1.put("A", 1);map1.put("B", 2);Map<String, Integer> map2 = new HashMap<>();map2.put("B", 3);map2.put("C", 4);map1.putAll(map2);System.out.println(map1); // {A=1, B=3, C=4}。
- 适用场景。
❌。 2.2。
List.copyOf()。
- 特点。