Java8 stream对List<Map<String,Object>>常用的数据处理

2023-11-17

java 8 在推出stream 之后 对于集合等数据的处理用了就回不去了,在此处做个笔记。

查数据
List<Map<String, Object>> prnInfo = xxxMapper.selectInfo(pars);

List<String> ids= prnInfo.stream().map(m -> m.get("id").toString()).collect(Collectors.toList());

**1.根据map的某个key分组**
Map<String, List<Map<String, Object>>> res= dataList.stream().collect(
                groupingBy(map -> map.get("d").toString()));
获取type="ZC"的数据        
----------------------------------------------------------------     
List<Map<String, Object>> data = res.stream().
                filter(
                        map -> (map.get("type")+"").equals("ZC")
                ).collect(Collectors.toList());
-----------------------------------------------------------------
List<Map<String, Object>> res = prnInfo .stream().filter(e ->Integer.parseInt(e.get("caseFlag").toString()) != 0).collect(Collectors.toList());

**2.根据某个key求对应value**
int totalNums= prnInfo .stream().collect(Collectors.summingInt( e -> Integer.parseInt(e.get("num").toString()))); 

**3.根据map中的某个keyvalue值进行判断过滤**

List<Map<String,Object>> res= prnInfo .stream().filter(e -> Double.parseDouble(e.get("z").toString())>Double.parseDouble(e.get("wrz").toString()))
                .collect(Collectors.toList());
------------------------------------------------------------------------
获取指XX时间前后的数据
LocalDateTime ftm = "xxxxxxxxx";
List<Map<String, Object>> res = prnInfo .stream().
                filter(
                        map -> LocalDateTime.parse(map.get("starttm")+"", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")).isBefore(tm )
                ).collect(Collectors.toList());
                
------------------------------------------------------------------------

                          

**4.对集合中的map做变更**
List<Map<String, Object>> res= prnInfo .stream().map(x -> {
                x.put("encd", Double.parseDouble(x.get("rz")+"")-Double.parseDouble(x.get("tdz")+""));
            return x;
        }).collect(Collectors.toList());


**5.排序**
List<Map<String, Object>>  res= prnInfo.stream().sorted((e1,e2) -> {
return -Double.compare(Double.valueOf(e1.get("num").toString()),Double.valueOf(e2.get("num").toString()));
}).collect(Collectors.toList());


res.sort(Comparator.comparing((Map<String, Object> h) -> (h.get("tm").toString())));

//排序可能对应字段数据为null导致空指针,需要先判断过滤一下
res.stream().filter(Objects::nonNull).filter((Map<String, Object> h)
                    -> (Objects.nonNull(h.get("fz")))).collect(Collectors.toList());


6.去重
List<String> res = prnInfo.stream().distinct().collect(Collectors.toList());


7.做统计
IntSummaryStatistics collect = list.stream().collect(Collectors.summarizingInt(Test::getId));
System.out.println("和:" + collect.getSum());
System.out.println("数量:" + collect.getCount());
System.out.println("最大值:" + collect.getMax());
System.out.println("最小值:" + collect.getMin());
System.out.println("平均值:" + collect.getAverage());

最大
double max = prnInfo.stream().mapToDouble(l -> ((BigDecimal) l.get("num")).doubleValue()).max().getAsDouble();double sum = prnInfo.stream().mapToDouble(l -> ((BigDecimal) l.get("num")).doubleValue()).sum();

8.list-map转换
Map<String, Object> map = list.stream()
				.collect(Collectors.toMap(i -> i.getName() + i.getUnitName(), j -> j, (k1, k2) -> k1));
				
------------------------------------------------------------------------
List<User> collect = map.entrySet().stream().map(item -> {
			User user= new User();
			user.setId(item.getKey());
			user.setName(item.getValue());
			return user;
		}).collect(Collectors.toList());

遍历。。
users.stream().forEach(x->{
    System.out.println(x);
});

下面这个场景用的也很多,List里面的a和b相等就把c属性相加,报表里面某些属性相等则求和等场景,可以先根据需要去重的多个字段进行分组,再计算返回
for (Map.Entry<String, List<DTO>> entry : beanList.parallelStream().collect(groupingBy(o -> (o.getId() + o.geCode()), Collectors.toList())).entrySet()) {
      if(bitMap.contains(entry.getKey()) && entry.getValue().size()==1){
           objects.add(entry.getValue().get(0));
      }else{
           List<DTO> transfer = entry.getValue();
           transfer.stream().reduce((a, b) -> DTO.builder()
                .irrCd(a.getIrrCd())
                .id(a.getId())
                .tm(a.getCode())
                .build())
                .ifPresent(objects::add);
            }
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java8 stream对List<Map<String,Object>>常用的数据处理 的相关文章

  • 为什么 JavaFX API 不包含在 Java 8 J2SE 中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有谁知道为什么 JavaFX 8 仍然不是即将推出的 Java 8 中的日常 J2SE API 显示所有 Java 组件的技术图清楚地将 Jav
  • 使用 Eclipse 将具有外部依赖项的 Java 项目导出到 jar

    有没有一种简单的方法可以将 Java 项目 包括其所有外部依赖项 导出到标准 jar 文件 我开发了一个使用多个 Apache 库的 SDK 我希望能够将该项目作为单个 jar 发布 到目前为止我找到的这个问题的答案要求将项目打包为 Run
  • HttpSession 内的同步是否可行?

    UPDATE 问题后立即解决 问题 通常 同步是在 JVM 内序列化并行请求 例如 private static final Object LOCK new Object public void doSomething synchroniz
  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • 无法将 INode 类型值分配给 类型变量。为什么?

    我想知道为什么以下代码无法工作 public static
  • 如何停止使用扫描仪从标准输入读取多行?

    我正在做一个 JAVA 作业 应该处理多行输入 指令显示 输入是从标准输入读取的 给出了示例输入的示例 one 1 two 2 three 3 我不明白上面的示例输入 从标准输入读取 是什么意思 这是我编写的一个测试程序 它可以消除我的困惑
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • 外部实体更改后索引不更新

    我目前正在开发一个项目 使用 JPA 2 1 保存数据并使用 hibernate search 4 5 0 final 搜索实体 映射类和索引后 搜索工作正常 但是 当我更改值时描述B 类从 someStr 到 anotherStr 数据库
  • 如何修复maven错误JAVA_HOME环境变量未正确定义

    当我在虚拟环境中检查maven的版本时 出现以下错误 The JAVA HOME environment variable is not defined correctly This environment variable is need
  • 为本地@ExceptionHandler编写JUnit测试

    我有以下控制器 class Controller ResponseStatus HttpStatus OK RequestMapping value verifyCert method RequestMethod GET public vo
  • 在 Java 中的 JFrame/JPanel/JComponent 中添加 Web 浏览器

    我正在开发一个 Java 应用程序 需要在应用程序中使用 Web 浏览器 我见过一些应用程序这样做 例如在同一应用程序中单击左侧面板中的提要并打开右侧面板中的链接时的 RSS 阅读器 我想实现类似的功能 在java中可以做到这一点吗 Jav
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0
  • 在Java中将日期“2020-05-22T12:51:20.765111Z”解析为Instant [重复]

    这个问题在这里已经有答案了 如何解析 2020 05 22T12 51 20 732111Z Java 中的 Instant I used LocalDateTime parse startTime DateTimeFormatter of
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 乔达时间中两个日期之间的天数

    如何找到两次之间的天数差异乔达时间 http www joda org joda time DateTime http www joda org joda time apidocs org joda time DateTime html实例
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell
  • 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

    我有一个迭代 String 实例的过程 每次迭代对 String 实例执行很少的操作 最后 String 实例被持久化 现在 我想为每次迭代添加一个检查 String 实例是否可能是垃圾邮件的检查 我只需验证 String 实例不是 成人材

随机推荐

  • Docker实战-NFS安装

    Docker安装 1 使用官方安装脚本自动安装 curl fsSL https get docker com bash s docker mirror Aliyun 2 启动 Docker 服务 systemctl start docker
  • Struts2框架详解(二)

    Struts2结果页面配置 全局结果页面 场景 多个action 有相同的方法返回值 且都到同一个结果页面 需求 创建两个action 执行默认的方法execute方法 让两个action的方法都返回success 返回success之后
  • Nerf 训练自有数据

    1 拍摄序列图像 放置在文件夹 如duck images 2 使用colmap使用COLMAP获取相机位姿 1 参考官方文档安装colmap 2 使用win 可执行程序 3 点击 File 选择 new project 点击 New 在du
  • 强化学习实现智能城市规划,清华团队最新成果登Nature子刊

    由于城市地理空间的多样性和巨大的动作空间 给城市布局用地和道路是一件非常复杂而困难的任务 长久以来一直依靠人类规划师的经验和直觉 如今 城市规划领域也有了自己的AlphaGo 近日 清华大学电子系城市科学与计算研究中心与建筑学院跨学科合作
  • eip系统服务器,eip系统

    本词条缺少概述图 补充相关内容使词条更完整 还能快速升级 赶紧来编辑吧 eip系统是以数据为基础 应用为核心 以实现业务及业务流程的自动化为目的多功能企业信息平台 中文名 eip系统 基 础 数据性 质 多功能企业信息平台 方 法 把不同系
  • 二货小易有一个W*H的网格盒子 JAVA

    import java util public class Main public static void main String args Scanner sc new Scanner System in int w sc nextInt
  • VS2017调试unity没有解决方案

    1 VS2017之前的版本调试unity 需要下载 Visual Studio Tools for Unity 2 VS2017内置了Visual Studio Tools for Unity 3 首先打开 帮助 gt 关于 已安装程序中查
  • 法研杯参赛总结:“抽取-生成”式长文本摘要

    PaperWeekly 原创 作者 苏剑林 单位 追一科技 研究方向 NLP 神经网络 法研杯 1 算是近年来比较知名的 NLP 赛事之一 今年是第三届 包含四个赛道 其中有一个 司法摘要 赛道引起了我们的兴趣 经过了解 这是面向法律领域裁
  • 单片机IO引脚驱动能力的提高

    这篇文字学到不少东西 包括文中链接 在此感谢坐而论道 现摘录如下 早期的51单片机 驱动能力很低 P1 P2和P3口只能驱动3个LSTTL输入端 P0口可驱动8个 如果想要驱动更多的器件 就要用到 总线驱动芯片 经常用的就是74LS244
  • html登录页面

    效果图 html代码 index html
  • Java多线程练习--取钱

    1 需求 小明和小红是一对夫妻 他们有一个共同的账户 余额是10万元 模拟2人同时去取钱10万 分析 1 需要提供一个账户类 创建一个账户对象代表2个人的共享账户 2 需要定义一个线程类 线程类可以处理账户对象 3 创建2个线程对象 传入同
  • 浅析GPT2中的autoregressive和BERT的autoencoding源码实现

    经常使用BERT来做研究 因此对Encoder的架构较为熟悉 但是从来没有了解过GPT这样的Decoder架构 尤其对自回归的形式不知道源码是如何实现的 为了方便对比和讨论 接来下所探讨的源码都是基于HuggingFace这个框架的 Ber
  • 数据结构--基础之顺序表的一种实现(堆实现)基于C++语言。Sqlite(初始化,增,删,查,定,判,打印,求长,销毁)

    Mr lei 来人 上代码 好的 Title 顺序表 WorkSpace C 环境下的实现 Date 2023 4 12 Author Mr Lei Copyright 版权所有 侵权不究 QQ 2223696890 include
  • DDR的VTT有源端接和无源端接(slua886a笔记)

    DDR的VTT有源端接和无源端接 slua886a笔记 背景 对于DDR的VTT端接 一直有说法是有源端接可降低功耗 之前一直没仔细理解其中原因 现在找了些相关的资料来介绍和对比有源和无源端接 理解有源端接的优点和降低功耗的原理 主要基于读
  • 微信小程序之模版的使用(template)

    WXML提供模板 template 可以在模板中定义代码片段 然后在不同的地方调用 分为两部分 定义模板和使用模板 1 定义模板 使用 name 属性 作为模板的名字 然后在
  • python散点图圆形区域_python – Matplotlib;散点图标记,圆内点

    我正在使用Matplotlib散点绘图仪进行绘图 对于标记 我理想地喜欢内部有圆点的圆形轮廓 外圆圈清楚地表明那里有东西 然后点更精确 我可以实现这个 如果我只是绘制两次 一次用轮廓然后再用点 但那时我的传说是不正确的 所以我的问题是 有什
  • 划分训练集、验证集和测试集代码

    输入需要划分的数据所在的文件夹 返回一个划分好的包含train val和test的文件夹 val ratio 和test ratio分别为验证集和测试集所占的比例 test ratio 0表示不划分测试集 import os import
  • Java - Stream流详解

    目录 前言 一 Stream流是什么 二 流的分类 顺序流 并行流 区别 三 获取流的常用方式 1 通过集合获取流 2 通过数组获取流 3 通过Stream of 方法获取流 四 常用方法用法 1 filter Predicate pred
  • 线性代数 - 特征向量和特征值

    今天在看到这个马汉诺拉距离的时候 又看到了这个东西 就是利用特征值来进行协方差方向上的伸缩 突然感觉到了线性代数的作用了 但是实际上 我今天看到了非常多的内容 但是都没有吸收完 很多内容都是线性代数的东西 但是这些东西我都忘了 这里先挖个坑
  • Java8 stream对List<Map<String,Object>>常用的数据处理

    java 8 在推出stream 之后 对于集合等数据的处理用了就回不去了 在此处做个笔记 查数据 List