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、