使用Stream流对List中的Map根据Key进行分组

使用Stream流对List中的Map根据Key进行分组

使用Java8的流可以很方便的对List进行多种操作,如分组、去重、过滤等,本文分享如何根据List中Map的某个Key进行分组。

首先,创建一个测试用的List:

List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("sex", "男");
map.put("name", "shigure");
list.add(new HashMap<>(map));
map.put("sex", "男");
map.put("name", "test1");
list.add(new HashMap<>(map));
map.put("sex", "女");
map.put("name", "test2");
list.add(new HashMap<>(map));
map.put("sex", "女");
map.put("name", "test3");
list.add(new HashMap<>(map));
map.put("sex", "未知");
map.put("name", "test4");
list.add(new HashMap<>(map));

然后根据Map中的sex字段进行分组:

Map<Object, List<Map<String, Object>>> group = list.stream()
        .collect(Collectors.groupingBy(value -> value.get("sex")));

分组前和分组后的结果对比:

分组前:[{name=shigure, sex=男}, {name=test1, sex=男}, {name=test2, sex=女}, {name=test3, sex=女}, {name=test4, sex=未知}]
分组后:{女=[{name=test2, sex=女}, {name=test3, sex=女}], 未知=[{name=test4, sex=未知}], 男=[{name=shigure, sex=男}, {name=test1, sex=男}]}