我们可以使用Java 8的流(Stream)API和Collectors工具类来对List<Map<String, Object>>中的某一个key进行分组,具体方式如下
假设我们有以下的List<Map<String, Object>> map数据结构:
List<Map<String, Object>> mapList = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "Alice");
map1.put("age", 20);
map1.put("city", "Shanghai");
mapList.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "Bob");
map2.put("age", 25);
map2.put("city", "Beijing");
mapList.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("name", "David");
map3.put("age", 30);
map3.put("city", "Shanghai");
mapList.add(map3);
Map<String, Object> map4 = new HashMap<>();
map4.put("name", "Eric");
map4.put("age", 35);
map4.put("city", "Beijing");
mapList.add(map4);
如果我们想要按照城市(city)进行分组,可以使用如下代码:
Map<Object, List<Map<String, Object>>> groupedMap =
mapList.stream()
.collect(Collectors.groupingBy(map -> map.get("city")));
这个代码将返回一个Map,其中键是城市名,值是属于该城市的Map列表。例如,在上面的示例中,groupedMap 将是以下内容:
{
"Shanghai": [
{"name":"Alice","age":20,"city":"Shanghai"},
{"name":"David","age":30,"city":"Shanghai"}
],
"Beijing": [
{"name":"Bob","age":25,"city":"Beijing"},
{"name":"Eric","age":35,"city":"Beijing"}
]
}
其中,键 “Shanghai” 和 “Beijing” 分别是城市名,而这些城市名对应的值则是一个Map列表,在该列表中包含了属于该城市的每个Map。
如果你要对Map列表中的某一个key进行分组,只需要将 map.get(“city”) 中的 “city” 替换为你想要分组的key即可。例如,如果你想要按照年龄(age)进行分组,可以修改代码如下:
Map<Object, List<Map<String, Object>>> groupedMap =
mapList.stream()
.collect(Collectors.groupingBy(map -> map.get("age")));
这样就会返回一个以年龄为键,Map列表为值的Map了。