我正在尝试将 map 列表合并为一个:
List<Map<String, List<Long>>> dataSet;
Map<String, Set<Long>> uniqueSets = dataset.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(
Map.Entry::getKey,
Collector.of(
HashSet<Long>::new,
...,
...
)
));
想法是 uniqueSet
应该在每个集合(由字符串标识)中保存一个唯一 ID(Longs)列表。但我不确定 ...
部分。
至于所请求的示例(JSON 格式):
输入:
[
{
"Collection1": [1, 2, 3, 3],
"Collection2": [2, 3]
},
{
"Collection1": [3, 4],
"Collection3": [1, 2]
}
]
输出:
{
"Collection1": [1, 2, 3, 4],
"Collection2": [2, 3],
"Collection3": [1, 2]
}
最佳答案
如果我理解你的问题,如果给出这两张 map :
{Mike=[5, 6], Jack=[1, 2, 3]}
{Fred=[7, 8], Jack=[4, 5]}
你想像这样组合它们:
{Mike=[5, 6], Fred=[7, 8], Jack=[1, 2, 3, 4, 5]}
给你:
Map<String, List<Long>> uniqueSets = dataset.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(
Map.Entry::getKey,
Collector.of(
ArrayList<Long>::new,
(list, item) -> list.addAll(item.getValue()),
(left, right) -> { left.addAll(right); return left; })
));
即:
- 供应商说对了:创建一个新的
ArrayList
来累加值 - 第二部分是累加器:它接受一个容器(列表)和一个项目,并将项目添加到容器中。请注意,这些项目是
Map.Entry
实例。 - 最后一部分是组合器,将两个由累加器填充的容器合并为一个
关于java - 将 map 列表合并为单个 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45173309/