【发布时间】:2017-08-25 13:50:44
【问题描述】:
我目前正在使用List<Map<String, Object>>,我正在尝试对地图中的各种键进行分组。
这似乎使用 Java 8 Streams 可以很好地工作:
Map<Object, Map<Object, List<Map<String, Object>>>> collect =
list
.stream()
.collect(Collectors.groupingBy(
item -> item.get("key1"),
Collectors.groupingBy(item -> item.get("key2"))
));
正如预期的那样,这给了我一个Map<Object, Map<Object, List<Map<String, Object>>>>,它在可能的分组结果大于 1 时效果很好。
例如,我有各种示例,其中正在进行的分组将总是导致最低级别列表中的单个项目。
行列表
{
[reference="PersonX", firstname="Person", dob="test", lastname="x"],
[reference="JohnBartlett", firstname="John", dob="test", lastname="Bartlett"]
}
按参考分组
当前 - 与 1 Map<String,Object> 分组到一个列表中
[PersonX, { [reference="PersonX", firstname="Person", dob="test", lastname="x"]}],
[JohnBartlett, { [reference="JohnBartlett", firstname="John", dob="test", lastname="Bartlett"]}]
偏好 - 没有列表,只有一个 Map<String,Object>
[PersonX, [reference="PersonX", firstname="Person", dob="test", lastname="x"]],
[JohnBartlett, [reference="JohnBartlett", firstname="John", dob="test", lastname="Bartlett"]]
流中是否有办法强制这些实例的输出为 Map<Object, Map<Object, Map<String, Object>>> - 所以单个 Map<String,Object> 而不是其中的 List?
任何帮助将不胜感激。
【问题讨论】:
-
这能回答你的问题吗? Java 8 List<V> into Map<K, V>
标签: java java-8 java-stream