最近review代码,发现了令人虎躯一震的代码,可以感受一下:
其实这个代码要实现的功能也很简单,就是把一个对象数组,展开成一个对象。例如,将
[
{
"k1": "v1"
},
{
"k2": "v2"
},
{
"k3": "v3"
},
{
"k4": "v4"
},
{
"k5": "v5"
}
]
转换为
{
"k1":"v1",
"k2":"v2",
"k3":"v3",
"k4":"v4",
"k5":"v5"
}
传统方式我们可以使用for循环遍历,进行组装,不过看起来比较low。
这里我们是用Stream流进行操作。使用一个流,完成上面的功能逻辑
String json = "[{\"k1\":\"v1\",\"k2\": \"v2\"},{\"k3\": \"v3\"},{\"k4\": \"v4\"},{\"k5\": \"v5\"}]";
List<HashMap<String, String>> objectMap = objectMapper.readValue(json, new TypeReference<List<HashMap<String, String>>>() {
});
Map<String, String> map = objectMap
.parallelStream()
.map(Map::entrySet)
.flatMap(Set::stream)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
这样就可以把对象数组展开,得到我们想要的对象结构了。