用java8新特性对List<Map<String, Object>>集合中的某一个key进行分组

我们可以使用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了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Java 8的Stream API来对List<Map<List<String>, Object>>进行分组。首先,您需要定义一个函数来获取Mapkey。然后,使用Stream的collect方法将元素收集到一个Map,其key是您定义的函数的结果,value是相应的Map。 以下是一个示例代码: ```java import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Map<List<String>, Object>> list = new ArrayList<>(); // 添加一些示例数据 Map<List<String>, Object> map1 = new HashMap<>(); map1.put(Arrays.asList("key1", "group1"), "value1"); list.add(map1); Map<List<String>, Object> map2 = new HashMap<>(); map2.put(Arrays.asList("key2", "group1"), "value2"); list.add(map2); Map<List<String>, Object> map3 = new HashMap<>(); map3.put(Arrays.asList("key3", "group2"), "value3"); list.add(map3); // 根据Mapkey进行分组 Map<List<String>, List<Map<List<String>, Object>>> groupedMap = list.stream() .collect(Collectors.groupingBy(map -> map.keySet().iterator().next())); // 输出结果 for (Map.Entry<List<String>, List<Map<List<String>, Object>>> entry : groupedMap.entrySet()) { System.out.println("Group: " + entry.getKey()); List<Map<List<String>, Object>> groupedList = entry.getValue(); for (Map<List<String>, Object> map : groupedList) { System.out.println("Map: " + map); } System.out.println(); } } } ``` 运行以上代码,您将得到以下输出: ``` Group: [key2, group1] Map: {[key2, group1]=[value2]} Group: [key3, group2] Map: {[key3, group2]=[value3]} Group: [key1, group1] Map: {[key1, group1]=[value1]} ``` 这样,List<Map<List<String>, Object>>集合就根据Mapkey成功分组了。请注意,这只是一个示例代码,您可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值