今天有个需求是将Map对象按某一键值进行归并,即将
[{
"newWeekCycle": "周一、周二、",
"startTime": "0:00",
"endTime": "1:00"
}, {
"newWeekCycle": "周二、周三、",
"startTime": "1:00",
"endTime": "2:00"
}, {
"newWeekCycle": "周三、周四、",
"startTime": "2:00",
"endTime": "3:00"
}, {
"newWeekCycle": "周四、周五、",
"startTime": "3:00",
"endTime": "4:00"
}, {
"newWeekCycle": "周五、周六、",
"startTime": "4:00",
"endTime": "5:00"
}, {
"newWeekCycle": "周六、周日、",
"startTime": "5:00",
"endTime": "6:00"
}, {
"newWeekCycle": "周日、",
"startTime": "6:00",
"endTime": "7:00"
}, {
"newWeekCycle": "周一、周二、",
"startTime": "7:00",
"endTime": "8:00"
}, {
"newWeekCycle": "周二、周三、",
"startTime": "8:00",
"endTime": "9:00"
}, {
"newWeekCycle": "周三、周四、",
"startTime": "9:00",
"endTime": "10:00"
}, {
"newWeekCycle": "周四、周五、",
"startTime": "10:00",
"endTime": "11:00"
}, {
"newWeekCycle": "周五、周六、",
"startTime": "11:00",
"endTime": "12:00"
}, {
"newWeekCycle": "周六、周日、",
"startTime": "12:00",
"endTime": "13:00"
}, {
"newWeekCycle": "周日、",
"startTime": "13:00",
"endTime": "14:00"
}, {
"newWeekCycle": "周一、周二、",
"startTime": "14:00",
"endTime": "15:00"
}, {
"newWeekCycle": "周二、周三、",
"startTime": "15:00",
"endTime": "16:00"
}, {
"newWeekCycle": "周三、周四、",
"startTime": "16:00",
"endTime": "17:00"
}, {
"newWeekCycle": "周四、周五、",
"startTime": "17:00",
"endTime": "18:00"
}, {
"newWeekCycle": "周五、周六、",
"startTime": "18:00",
"endTime": "19:00"
}, {
"newWeekCycle": "周六、周日、",
"startTime": "19:00",
"endTime": "20:00"
}, {
"newWeekCycle": "周日、",
"startTime": "20:00",
"endTime": "21:00"
}]
这种List<Map<String,String>>的数据转化为
{
"周三、周四、": [{
"startTime": "2:00",
"endTime": "3:00"
}, {
"startTime": "9:00",
"endTime": "10:00"
}, {
"startTime": "16:00",
"endTime": "17:00"
}],
"周二、周三、": [{
"startTime": "1:00",
"endTime": "2:00"
}, {
"startTime": "8:00",
"endTime": "9:00"
}, {
"startTime": "15:00",
"endTime": "16:00"
}],
"周五、周六、": [{
"startTime": "4:00",
"endTime": "5:00"
}, {
"startTime": "11:00",
"endTime": "12:00"
}, {
"startTime": "18:00",
"endTime": "19:00"
}],
"周一、周二、": [{
"startTime": "0:00",
"endTime": "1:00"
}, {
"startTime": "7:00",
"endTime": "8:00"
}, {
"startTime": "14:00",
"endTime": "15:00"
}],
"周日、": [{
"startTime": "6:00",
"endTime": "7:00"
}, {
"startTime": "13:00",
"endTime": "14:00"
}, {
"startTime": "20:00",
"endTime": "21:00"
}],
"周六、周日、": [{
"startTime": "5:00",
"endTime": "6:00"
}, {
"startTime": "12:00",
"endTime": "13:00"
}, {
"startTime": "19:00",
"endTime": "20:00"
}],
"周四、周五、": [{
"startTime": "3:00",
"endTime": "4:00"
}, {
"startTime": "10:00",
"endTime": "11:00"
}, {
"startTime": "17:00",
"endTime": "18:00"
}]
}
这种格式的数据,方便前端解析,这其中的变化就是以之前列表中Map的某一key值进行归并,将Map该字段相同的其余键值对变为列表,即由之前的List<Map<String,String>>转化为Map<String,List<Map>>,下边直接上代码
@Test
public void test014() {
List<Map<String, Object>> data = new ArrayList<>();
for (int i = 0; i < 21; i++) {
Map<String, Object> map1 = new HashMap<>();
map1.put("weekCycle", (i % 7 + 1) +","+String.valueOf(i%7+2));
map1.put("startTime",i+":00");
map1.put("endTime",i+1+":00");
data.add(map1);
}
for(Map showTimeMap: data){
String weekCycle = (String)showTimeMap.get("weekCycle");
String[] split = weekCycle.split(",");
StringBuilder stringBuilder = new StringBuilder();
for(String s:split){
if("1".equals(s))
stringBuilder.append("周一、");
if("2".equals(s))
stringBuilder.append("周二、");
if("3".equals(s))
stringBuilder.append("周三、");
if("4".equals(s))
stringBuilder.append("周四、");
if("5".equals(s))
stringBuilder.append("周五、");
if("6".equals(s))
stringBuilder.append("周六、");
if("7".equals(s))
stringBuilder.append("周日、");
}
showTimeMap.remove("weekCycle");
showTimeMap.put("newWeekCycle",stringBuilder.toString());
}
String s1 = JSON.toJSONString(data);
System.out.println(s1);
Map collect = data.stream().collect(
Collectors.groupingBy(
(Map m) -> (String) m.get("newWeekCycle"),
Collectors.mapping(
(Map n) -> new HashMap(){
{
put("startTime",(String) n.get("startTime"));
put("endTime",(String) n.get("endTime"));
}
} ,
Collectors.toList()
)
)
);
String s = JSON.toJSONString(collect);
System.out.println(s);