最近使用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问题的更多相关文章

  1. JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    测试又报bug啦 接到测试小伙伴的问题,说是一个接口不返回数据了,好吧,虽然不是我写的接口任务落到头上也得解决,本地调试了一下,好家伙,直接抛了个异常出来,这又是哪位大哥喝醉了写的代码... Exce ...

  2. 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    大型网站技术架构(四)--核心架构要素   作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...

  3. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  4. 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 ...

  5. Java 8 Stream

    1.关于Java8部分新特性介绍 Java8的新特性很多,在此就不一一介绍了,这里只说一下我自己在工作用用得比较多的几点: 1.1.Lambda表达式 Lambda允许把函数作为一个方法的参数(函数作 ...

  6. java.util.stream 库简介

    Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...

  7. Java 8 Stream 教程

    Java 8 Stream Tutorial 本文采用实例驱动的方式,对JAVA8的stream API进行一个深入的介绍.虽然JAVA8中的stream API与JAVA I/O中的InputStr ...

  8. java集合 stream 相关用法(1)

    java8新增一种流式数据,让操作集合数据更简单方便. 定义基本对象: public class Peo { private String name; private String id; publi ...

  9. Java 8 Stream API的使用示例

    前言 Java Stream API借助于Lambda表达式,为Collection操作提供了一个新的选择.如果使用得当,可以极大地提高编程效率和代码可读性. 本文将介绍Stream API包含的方法 ...

  10. Java 8 Stream API具体解释

    Java 8 Stream API具体解释 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStr ...

随机推荐

  1. ChatGPT,我的 .NET 应用该选择哪种日志框架?

    When using .NET 6, compare different main stream third-party logging packages, and give suggestions ...

  2. 纯css高斯背景模糊(毛玻璃,伪元素,完整实例)

    先上效果图: 写博客不管是做笔记还是干啥,直接上源码不行么,还不放效果图,拆分成几段谁慢慢看,慢慢理解去 自己动手,丰衣足食,上代码: <!DOCTYPE HTML> <html l ...

  3. 引爆你的网页乐趣!前端十个令人捧腹的JavaScript整蛊代码。

    愚人节整蛊代码.想要在网页上增添一抹幽默与惊喜吗?或是想给你的朋友一个意想不到的"小惊喜"?那么,这十款简单而有趣的JavaScript前端整蛊代码绝对能满足你的需求!每一个代码都 ...

  4. Elasticsdump 数据导入/导出

    目录 一.安装过程 安装NODE 通过npm安装elasticdump 二.数据导出 实操一 实操二 实操三 三.文件导入 一.安装过程 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据 ...

  5. Linux中的which whereis locate

    which which会在PATH环境中搜寻可执行文件 whereis Linux会将系统里面所有的文件都搜集到一个数据库文件中,whereis从这个数据库文件里面寻找文件 locate locate ...

  6. 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 ...

  7. Kingbase+sqlsugar 携手助力医疗国产化替换 【人大金仓 .NET ORM】

    1. 案例 西京医院CT预约系统, 该项目在2024年初进行上线测试,在正常运行了两天后,业务系统报错:The connection pool has been exhausted, either r ...

  8. LLM实战:LLM微调加速神器-Unsloth + LLama3

    1. 背景 五一结束后,本qiang~又投入了LLM的技术海洋中,本期将给大家带来LLM微调神器:Unsloth. 正如Unsloth官方的对外宣贯:Easily finetune & tra ...

  9. C 语言编程 — 数据类型的别名

    目录 文章目录 目录 前文列表 typedef 关键字 typedef 和预处理器指令 #define 的区别 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本 ...

  10. 使用IIS部署WebDAV

    服务器开启WebDAV 在服务器安装IIS的同时 要启用Windows身份验证与WebDAV发布 如果不是服务器版本,参照下图 在IIS中新建WebDAV网站 配置好本地目录与端口 启用Windows ...