【发布时间】:2021-02-02 02:45:12
【问题描述】:
我有一个 gprsEvents 列表,其中列表中的每个元素都是 Map
{
"events":[
{
"localTimeStamp":"20170523113305",
"serviceCode":"GPRS",
"recEntityCode":[
"1",
"2"
],
"index":"1",
"dataVolumeIncoming":"400000",
"dataVolumeOutgoing":"27600",
"callChargingId":"4100853125",
},
{
"localTimeStamp":"20190523113305",
"serviceCode":"GPRS",
"recEntityCode":[
"2",
"4"
],
"index":"2",
"dataVolumeIncoming":"300000",
"dataVolumeOutgoing":"47600",
"callChargingId":"4100853125",
},
{
"localTimeStamp":"20180523113305",
"serviceCode":"GPRS",
"recEntityCode":[
"1",
"2"
],
"index":"7",
"dataVolumeIncoming":"100000",
"dataVolumeOutgoing":"17600",
"callChargingId":"5100853125",
}
]
}
- 按字段“callChargingId”对列表中的元素进行分组。
- 分组的结果应该是一个Map,其中键是“callChargingIds”,是一个单独的元素,其中每个字段都包含一组作为分组结果的字段。结果应该如下所示:
{
"5100853125":[
{
"localTimeStamp":"20180523113305",
"serviceCode":"GPRS",
"recEntityCode":[
"1",
"2"
],
"index":"7",
"dataVolumeIncoming":"100000",
"dataVolumeOutgoing":"17600"
}
],
"4100853125":[
{
"localTimeStamp":[
"20170523113305",
"20190523113305"
],
"serviceCode":"GPRS",
"recEntityCode":[
[
"1",
"2"
],
[
"2",
"4"
]
],
"index":[
"1",
"2"
],
"dataVolumeIncoming":"700000",
"dataVolumeOutgoing":"75200"
}
]
}
对于某些字段,分组的结果应该是一个列表(timeStamp、recEntityCode 和索引),而在其他字段中,结果应该是总和(dataVolumeIncoming 和 dataVolumeOutgoing
我开始考虑使用 java 8 流(groupingBy): gprsEvents.stream().collect(Collectors.groupingBy(map -> map.get("callChargingId").toString()))
我现在坚持要获得合适的结果,特别是要在一个 Map 和上述字段的列表或总和中获得结果......
【问题讨论】:
标签: json java-8 stream grouping collectors