我正在努力使用Vavr将Maps的List减少到单个Map
<List<Map<String, Object>>>至
<Map<String, Object>>我用flatmap/reduce/merge试了一下,但不幸的是没有好的结果:-(
有没有人能提供一个用io.vavr.collection.List/io.vavr.collection.Map实现的例子?
发布于 2021-10-05 12:22:42
您有几个选项。
例如,给定以下数据集(很抱歉其简单性):
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);您可以将不同的Map与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));它们都使用Map merge方法。此方法有一个overloaded version,允许您定义应如何解决冲突。
发布于 2021-10-05 11:35:27
我不知道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名义上是静态的,而且是强类型的。
https://stackoverflow.com/questions/69448517
复制相似问题