Java 将List<Object> 转换成 Map<String, Map<String,List<Object>>>的几种方法

本文介绍了如何在Java中将List类型的数据转换为Map<String,Map<String,List>>类型,提供了使用stream()、foreach和for循环的实现方式,并给出了Person类作为示例。这些方法涉及Java集合框架的高级用法,如分组和映射操作。
摘要由CSDN通过智能技术生成

简介:

本文主要介绍Java中将指定List类型数据转换成Map<String, Map<String,List>>类型的几种方法。通过stream()或foreach循环实现。

示例Person类

class Person { String personId; LocalDate date; String type; // getters & setters }

1、使用stream()进行转换

list.stream()
    .collect(Collectors.groupingBy(
        Person::getPersonId,
        Collectors.groupingBy(
            Person::getDate
)));

2、使用foreach实现转换

Map<String, Map<LocalDate, List<Person>>> outerMap = new HashMap<>();
list.forEach(p -> outerMap
        .computeIfAbsent(p.getPersonId(), k -> new HashMap<>()) // returns innerMap
        .computeIfAbsent(p.getDate(), k -> new ArrayList<>())   // returns innerList
    .add(p)); // adds Person to innerList

3、使用for循环转换

Map<String,Map<LocalDate,List<Person>>> outerMap = new HashMap<>();
for(Person p : list) {
    Map<LocalDate,List<Person>> innerMap = outerMap.get(p.getPersonId());
    if (innerMap == null) {
        innerMap = new HashMap<>();
        outerMap.put(p.getPersonId(), innerMap);
    }
    List<Person> innerList = innerMap.get(p.getDate());
    if (innerList == null) {
        innerList = new ArrayList<>();
        innerMap.put(p.getDate(), innerList);
    }
    innerList.add(p);
}

了解更多分析及数据抓取可查看:
http://data.yisurvey.com:8989/
特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。

Java中,将`List<Object>`分组为`Map<String, List<String>>`可以通过以下步骤实现: 1. 首先,创建一个空的`Map<String, List<String>>`用于存储分组后的结果。 2. 遍历`List<Object>`中的每个元素。 3. 对于每个元素,获取需要作为键的字符串属性(假设为`key`)和需要添加到对应列表中的字符串属性(假设为`value`)。 4. 检查`Map<String, List<String>>`中是否已存在以`key`为键的列表。如果不存在,则创建一个新的列表,并将其与`key`关联。 5. 将当前的`value`添加到与`key`关联的列表中。 6. 重复步骤2-5,直到遍历完所有元素。 7. 返回最终的`Map<String, List<String>>`结果。 下面是一个示例代码实现: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class GroupingExample { public static void main(String[] args) { List<Object> objects = new ArrayList<>(); // 假设objects中包含了多个对象 Map<String, List<String>> groupedMap = groupList(objects); System.out.println(groupedMap); } public static Map<String, List<String>> groupList(List<Object> objects) { Map<String, List<String>> groupedMap = new HashMap<>(); for (Object obj : objects) { String key = obj.getKey(); // 获取需要作为键的字符串属性 String value = obj.getValue(); // 获取需要添加到对应列表中的字符串属性 List<String> valueList = groupedMap.getOrDefault(key, new ArrayList<>()); valueList.add(value); groupedMap.put(key, valueList); } return groupedMap; } } ``` 请注意,上述示例代码中的`Object`类是一个占位符,你需要根据实际情况替换为你自己的对象类型,并相应地获取键和值的属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值