java 8 Stream list to Map key 重复 value合并到Collection

关于把list转换成key value的map有很多博客上都有实现,这里是一个吧value放入到集合中去

 

      List<String> list = Lists.newArrayList("1", "2", "3", "1");
        Map<String, List<String>> map = list.stream().collect(Collectors.toMap(key -> key,
                value -> Lists.newArrayList(value),
                (List<String> newValueList, List<String> oldValueList) -> {
                    oldValueList.addAll(newValueList);
                    return oldValueList;
                }));
        System.out.println(JSON.toJSONString(map));

 类似的,你的list泛型可以是一个bean,取bean的属性当key或者value,转换成一个集合

 

结果: {"1":["1","1"],"2":["2"],"3":["3"]}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java 8中的Stream API来实现将Map转换为JSONObject。具体步骤如下: 1. 使用entrySet()方法将Map转换为Set<Map.Entry<K, V>>类型的集合。 2. 调用Stream API中的map()方法,将每个Map.Entry对象转换为JSONObject中的键值对。 3. 使用collect()方法将所有的JSONObject键值对收集到一个新的JSONObject对象中。 下面是一个示例代码: ``` import org.json.JSONObject; import java.util.Map; import java.util.stream.Collectors; public class MapToJson { public static JSONObject mapToJson(Map<String, Object> map) { JSONObject json = map.entrySet() .stream() .map(entry -> { Object value = entry.getValue(); if (value instanceof Map) { value = mapToJson((Map) value); } else if (value instanceof List) { value = listToJson((List) value); } return new JSONObject().put(entry.getKey(), value); }) .reduce(new JSONObject(), JSONObject::put, JSONObject::put); return json; } public static JSONArray listToJson(List<Object> list) { JSONArray json = list.stream() .map(value -> { if (value instanceof Map) { value = mapToJson((Map) value); } else if (value instanceof List) { value = listToJson((List) value); } return value; }) .collect(Collectors.toCollection(JSONArray::new)); return json; } } ``` 这个代码可以将Map转换为JSONObject或JSONArray,具体使用方式可以根据需求进行调整。需要注意的是,在使用Stream API时,需要对Map中的值进行类型判断并递归处理,这样才能保证最终的JSONObject或JSONArray对象正确无误。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值