java 8 stream toMap问题
最近使用java的stream功能有点多,理由有2:
1)少写了不少代码
2)在性能可以接受的范围内
在巨大的collection基础上使用stream,没有什么经验。而非关键业务上,乐于使用stream。
--
工作中常常需要把ListMap转为Map<String,List<Map<String,Object>>>,所以用toMap。
之所以这么做,主要两个理由:
1)业务需要
2)愿意使用key去寻找,而不是重复遍历数组。完成的代码比较友好,容易看,也容易理解。比较文字比数字友好
例子:
package com.hc.demomain.base.stream; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import com.alibaba.fastjson.JSONObject; public class StreamTest { public static void main(String[] args) {
List<Map<String,Object>> stuList=new ArrayList<Map<String,Object>>(); Map<String,Object> a1=new HashMap<String,Object>();
a1.put("className", "fujian");
a1.put("name", "a1");
a1.put("sex", "男"); stuList.add(a1); Map<String,Object> a2=new HashMap<String,Object>();
a2.put("className", "fujian");
a2.put("name", "a2");
a2.put("sex", "女");
stuList.add(a2); Map<String,Object> b1=new HashMap<String,Object>();
b1.put("className", "beijing");
b1.put("name", "b1");
b1.put("sex", "男");
stuList.add(b1); Map<String,Object> b2=new HashMap<String,Object>();
b2.put("className", "beijing");
b2.put("name", "b2");
b2.put("sex", "女");
stuList.add(b2); Map<String,Object> c1=new HashMap<String,Object>();
c1.put("className", "乌鲁木齐");
c1.put("name", "c1");
c1.put("sex", "女");
stuList.add(c1); Map<String,Object> c2=new HashMap<String,Object>();
c2.put("className", "乌鲁木齐");
c2.put("name", "c2");
c2.put("sex", "男");
stuList.add(c2);
//使用className分组
Map<String,List<Map<String,Object>>> destMap= stuList.stream().collect(Collectors.toMap(
item->item.get("className").toString(),v->{
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
Map<String,Object> m=new HashMap<String,Object>();
m.put("name",v.get("name"));
m.put("sex",v.get("sex"));
list.add(m);
return list;
},
//重複處理
(List<Map<String,Object>> oldList, List<Map<String,Object>> newList) -> {
oldList.addAll(newList);
return oldList;
}
)
);
JSONArray srcObject = (JSONArray)JSONObject.toJSON(stuList);
System.out.println(JSONObject.toJSONString(srcObject, true));
JSONObject jsonObject = (JSONObject)JSONObject.toJSON(destMap);
System.out.println(JSONObject.toJSONString(jsonObject, true)); }
}
以下是原始的ListMap和转换后Map<String,List<Map<String,Object>>> 的对比(为了方便阅读,使用fastJson格式化了下):
原始的ListMap:
[
{
"name":"a1",
"className":"fujian",
"sex":"男"
},
{
"name":"a2",
"className":"fujian",
"sex":"女"
},
{
"name":"b1",
"className":"beijing",
"sex":"男"
},
{
"name":"b2",
"className":"beijing",
"sex":"女"
},
{
"name":"c1",
"className":"乌鲁木齐",
"sex":"女"
},
{
"name":"c2",
"className":"乌鲁木齐",
"sex":"男"
}
]
通过toMap转换后获得的Map<String,List<Map<String,Object>>>:
{
"乌鲁木齐":[
{
"name":"c1",
"sex":"女"
},
{
"name":"c2",
"sex":"男"
}
],
"beijing":[
{
"name":"b1",
"sex":"男"
},
{
"name":"b2",
"sex":"女"
}
],
"fujian":[
{
"name":"a1",
"sex":"男"
},
{
"name":"a2",
"sex":"女"
}
]
}
下次有机会,专门比较下,不同写法的效率!
不过已经有人做过了试验,https://www.cnblogs.com/jpfss/p/11262231.html
java 8 stream toMap问题的更多相关文章
- JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
测试又报bug啦 接到测试小伙伴的问题,说是一个接口不返回数据了,好吧,虽然不是我写的接口任务落到头上也得解决,本地调试了一下,好家伙,直接抛了个异常出来,这又是哪位大哥喝醉了写的代码... Exce ...
- 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
大型网站技术架构(四)--核心架构要素 作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- Java 8 Stream API Example Tutorial
Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...
- Java 8 Stream
1.关于Java8部分新特性介绍 Java8的新特性很多,在此就不一一介绍了,这里只说一下我自己在工作用用得比较多的几点: 1.1.Lambda表达式 Lambda允许把函数作为一个方法的参数(函数作 ...
- java.util.stream 库简介
Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...
- Java 8 Stream 教程
Java 8 Stream Tutorial 本文采用实例驱动的方式,对JAVA8的stream API进行一个深入的介绍.虽然JAVA8中的stream API与JAVA I/O中的InputStr ...
- java集合 stream 相关用法(1)
java8新增一种流式数据,让操作集合数据更简单方便. 定义基本对象: public class Peo { private String name; private String id; publi ...
- Java 8 Stream API的使用示例
前言 Java Stream API借助于Lambda表达式,为Collection操作提供了一个新的选择.如果使用得当,可以极大地提高编程效率和代码可读性. 本文将介绍Stream API包含的方法 ...
- Java 8 Stream API具体解释
Java 8 Stream API具体解释 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStr ...
随机推荐
- ChatGPT,我的 .NET 应用该选择哪种日志框架?
When using .NET 6, compare different main stream third-party logging packages, and give suggestions ...
- 纯css高斯背景模糊(毛玻璃,伪元素,完整实例)
先上效果图: 写博客不管是做笔记还是干啥,直接上源码不行么,还不放效果图,拆分成几段谁慢慢看,慢慢理解去 自己动手,丰衣足食,上代码: <!DOCTYPE HTML> <html l ...
- 引爆你的网页乐趣!前端十个令人捧腹的JavaScript整蛊代码。
愚人节整蛊代码.想要在网页上增添一抹幽默与惊喜吗?或是想给你的朋友一个意想不到的"小惊喜"?那么,这十款简单而有趣的JavaScript前端整蛊代码绝对能满足你的需求!每一个代码都 ...
- Elasticsdump 数据导入/导出
目录 一.安装过程 安装NODE 通过npm安装elasticdump 二.数据导出 实操一 实操二 实操三 三.文件导入 一.安装过程 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据 ...
- Linux中的which whereis locate
which which会在PATH环境中搜寻可执行文件 whereis Linux会将系统里面所有的文件都搜集到一个数据库文件中,whereis从这个数据库文件里面寻找文件 locate locate ...
- WEB服务与NGINX(25)- LNMP架构-WEB集群部署phpmyadmin
目录 1 LNMP架构-WEB集群部署phpmyadmin 1.1 WEB集群架构需求分析 1.2 WEB集群架构环境 1.3 部署mariadb 1.4 部署web服务器nginx 1.5 部署re ...
- Kingbase+sqlsugar 携手助力医疗国产化替换 【人大金仓 .NET ORM】
1. 案例 西京医院CT预约系统, 该项目在2024年初进行上线测试,在正常运行了两天后,业务系统报错:The connection pool has been exhausted, either r ...
- LLM实战:LLM微调加速神器-Unsloth + LLama3
1. 背景 五一结束后,本qiang~又投入了LLM的技术海洋中,本期将给大家带来LLM微调神器:Unsloth. 正如Unsloth官方的对外宣贯:Easily finetune & tra ...
- C 语言编程 — 数据类型的别名
目录 文章目录 目录 前文列表 typedef 关键字 typedef 和预处理器指令 #define 的区别 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本 ...
- 使用IIS部署WebDAV
服务器开启WebDAV 在服务器安装IIS的同时 要启用Windows身份验证与WebDAV发布 如果不是服务器版本,参照下图 在IIS中新建WebDAV网站 配置好本地目录与端口 启用Windows ...