我需要像下面这样生成一个输出JSON
{
"account":{
"Alpha":{
"OLD":{
"long":"zerozerooneO",
"short":"001O"
},
"NEW":{
"long":"zerozerooneN",
"short":"001N"
}
},
"Beta":{
"OLD":{
"long":"zerozerooneO",
"short":"001O"
},
"NEW":{
"long":"zerozerooneN",
"short":"001N"
}
}
}
}
字符串
从下面的对象列表中获取示例
[
{
"codetype":"Alpha",
"shortOldCode":"001O",
"longOldCode":"zerozerooneO",
"shortNewCode":"001N",
"longNewCode":"zerozerooneN"
},
{
"codetype":"Beta",
"shortOldCode":"001O",
"longOldCode":"zerozerooneO",
"shortNewCode":"001N",
"longNewCode":"zerozerooneN"
}
]
型
我试过这样的方法
Map<String, Map<String, Map<String, List<Object>>>> newList = new HashMap<>();
newList = dataMap.stream()
.filter(distinctByKey(code -> code.getCodeType())).collect(
groupingBy((GetCodeTypes a) -> "account",
groupingBy((GetCodeTypes b) -> b.getCodeType(),
groupingBy((GetCodeTypes c) -> "OLD",
mapping(
v -> {
GetCodeTypesResponse.Old
oldCode = new GetCodeTypesResponse.Old();
oldCode.setLongs(v.getLongOldCode());
oldCode.setShorts(v.getShortOldCode());
return oldCode;
}, toList())))));
型
希望任何人都能给我指出一个正确的方向,在Java 8中使用hashmap来获得所需的输出。我知道使用记录进行分组/Map可能适用于新版本的Java,但我正在做的项目是Java 1.8,如果可能的话,我想使用Java Streams来解决这个问题。
2条答案
按热度按时间wz1wpwve1#
这里有一个合理的,但不基于流的解决方案来解决你的问题:
字符串
yfwxisqw2#
这是一个简单的非流解决方案,使用JSON库进行转换。
https://github.com/octomix/josson
字符串
输出
型