【问题标题】:Convert List of Maps to a single Map with VAVR使用 VAVR 将地图列表转换为单个地图
【发布时间】:2021-11-25 14:50:45
【问题描述】:

我正在努力使用 VavrListMaps 减少为单个 Map

<List<Map<String, Object>>>

<Map<String, Object>>

我用flatmap/reduce/merge 尝试过,但不幸的是没有幸福的结局:-(

有人可以提供一个示例如何使用io.vavr.collection.List/io.vavr.collection.Map 吗?

【问题讨论】:

    标签: java dictionary merge vavr


    【解决方案1】:

    您有多种选择。

    例如,给定以下数据集(为简单起见感到抱歉):

    Map<String, Object> map1 = HashMap.of("key1", "value1", "key2", "value2");
    Map<String, Object> map2 = HashMap.of("key3", "value3", "key4", "value4");
    Map<String, Object> map3 = HashMap.of("key5", "value5", "key6", "value6");
    List<Map<String, Object>> list = List.of(map1, map2, map3);
    

    您可以将不同的Maps 与fold 组合,例如:

    Map<String, Object> result = list.fold(HashMap.empty(), (m1, m2) -> m1.merge(m2));
    

    您也可以使用reduce

    Map<String, Object> result = list.reduce((m1, m2) -> m1.merge(m2));
    

    他们都使用Mapmerge方法。此方法有一个overloaded version,可让您定义应如何解决冲突。

    【讨论】:

      【解决方案2】:

      我不知道 vavr 和这个有什么关系。

      list.stream()                             // A
        .flatMap(map -> map.entrySet().stream()) // B
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
      

      [A] 现在你有一个Map&lt;String, Object&gt; 的流。

      [B] 现在你有一个映射条目流。 现在你有一个键/值对流。

      然后通过提供从Map.Entry 对象中提取键的函数和提取值的函数将它们收集到映射中。

      请注意,如果您有一张 Map&lt;String, Object&gt; 类型的地图,我给它 99% 的可能性是您做错了什么。毕竟,Java 是名义上的、静态的和强类型的。

      【讨论】:

        猜你喜欢
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        • 1970-01-01
        • 2020-07-06
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        相关资源
        最近更新 更多