java - 将地图数据列表分组到 Java 中的嵌套 HashMap
问题描述
输入:我有一个 Map 列表(键 - 值对)和分组键
例如List<Map<String,String>> inputData
json
[
{
'a': 'German',
'b': 'Audi',
'e': 'T3'
},
{
'a': 'German',
'b': 'BMW',
'c': 'T6'
},
{
'a': 'American',
'b': 'Tesla',
'c': 'T6'
}
]
和分组键=a and b
对于分组键 a -> 我将创建两个存储桶,一个用于德国和其他美国人,在每个存储桶中我将再次为 b 的值创建存储桶,检查以下
我想产生以下内容: Map<String, Map<String, List<Map>>
-地图的嵌套==分组键的数量,这里是2
{
German: {
Audi: [
{
'a': 'German',
'b': 'Audi',
'e': 'T3'
}
],
BMW: [
{
'a': 'German',
'b': 'BMW',
'c': 'T6'
}
]
},
American: {
Tesla: [
{
'a': 'American',
'b': 'Tesla',
'c': 'T6'
}
]
}
}
我尝试过的事情:
inputData.stream().collect(Collectors.groupingBy(mapItem -> this.constructGroupingKey(groupingKeys, mapItem)));
//constructGroupingKey - this joins the values of of given grouping keys
这样我可以构造连接键,例如 German-Audi OR German-BMW 并保存匹配的项目,但这不是我想要的。
正如@Naman 在这里所说的具体类 - 以下使其成为一个班轮,但我不能对数据做出假设,它的类型是 Map
Map<String, Map<String, List<ConcreteClass>>> output = inputData.stream().collect(Collectors.groupingBy(ConcreteClass::getCountry, Collectors.groupingBy(ConcreteClass::getCarType)));
将不胜感激其他想法,谢谢。我也很好奇我是否可以在没有指定分组键的情况下根据给定数据派生分组。
输入具有动态性质,键和值由输入定义
解决方案
只需双击作为具体类的输入表示。它看起来更简单和干净:
Map<String, Map<String, List<ThrowAway>>> multipleGrouping(List<ThrowAway> inputData) {
return inputData.stream()
.collect(Collectors.groupingBy(ThrowAway::getA,
Collectors.groupingBy(ThrowAway::getB)));
}
我刚刚创建了一个与您的地图表示相同的示例类:
class ThrowAway {
String a;
String b;
String c;
String getA() {
return a;
}
String getB() {
return b;
}
}
推荐阅读
- python-2.7 - Python 2.7 多处理管理器 IOError:[Errno 11] 资源暂时不可用
- r - 如何根据他们的距离让每个基因只有一个 linc
- html - Heroku 没有读取我的 Node 应用程序的 webpack 包文件
- google-apps-script - 使用谷歌脚本发布 json 数据时出现状态码错误
- c - 为什么我的代码会导致分段错误?
- java - -DarchetypeArtifactId=maven-archetype-quickstart 有效,但 -DarchetypeArtifactId=maven-archetype-webapp 无效?
- node.js - 用 cookie-session 表达 req.session 为空
- node.js - 护照身份验证重定向到绝对 URL 失败
- excel - 如果值,VBA显示行
- python - Pandas - 获取每个用户的每周平均值