使用VAVR将地图列表转换为单个地图



我正在努力使用Vavr将Maps的List减少到单个Map

<List<Map<String, Object>>>

<Map<String, Object>>

我尝试了flatmap/reduce/merge,但不幸的是没有快乐的结局:-(

有人能提供一个例子,如何做它与io.vavr.collection.List/io.vavr.collection.Map?

你有几个选择。

例如,给定以下数据集(很抱歉过于简单):

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);

您可以将不同的Mapfold组合,例如:

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方法。这个方法有一个重载版本,它允许你定义如何解决冲突。

我不知道vavr与此有什么关系。

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

[A]现在你有一个Map<String, Object>流。

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

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

注意,如果你有一个类型为Map<String, Object>的映射,我给它99%的可能性你做错了什么。毕竟,Java在名义上是静态强类型的。

相关内容

  • 没有找到相关文章

最新更新