首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VAVR将地图列表转换为单个地图

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

Stack Overflow用户
提问于 2021-10-05 10:04:45
回答 2查看 200关注 0票数 1

我正在努力使用VavrMaps的List减少到单个Map

代码语言:javascript
复制
<List<Map<String, Object>>>

代码语言:javascript
复制
<Map<String, Object>>

我用flatmap/reduce/merge试了一下,但不幸的是没有好的结果:-(

有没有人能提供一个用io.vavr.collection.List/io.vavr.collection.Map实现的例子?

EN

回答 2

Stack Overflow用户

发布于 2021-10-05 12:22:42

您有几个选项。

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

代码语言:javascript
复制
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组合,例如:

代码语言:javascript
复制
Map<String, Object> result = list.fold(HashMap.empty(), (m1, m2) -> m1.merge(m2));

您也可以使用reduce

代码语言:javascript
复制
Map<String, Object> result = list.reduce((m1, m2) -> m1.merge(m2));

它们都使用Map merge方法。此方法有一个overloaded version,允许您定义应如何解决冲突。

票数 1
EN

Stack Overflow用户

发布于 2021-10-05 11:35:27

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

代码语言:javascript
复制
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名义上是静态的,而且是强类型的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69448517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档