stream流将对象按属性值或将Map按key值进行合并归并

今天有个需求是将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);

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值