Steam流工作常用方法总结

收集list 以某几个字段为键以内容为list的map

Map<String, List<TVoucherDetail>> tVoucherDetailMap = list.stream().collect(Collectors.groupingBy(
obj -> obj.getDocumentNumber() + "-" + obj.getCertificationData()
));

收集list 以某两个字段分组,并以进行统计

Map<String, Map<String, BigDecimal>> map = s1.collect(
Collectors.groupingBy(
CurrentTransactionsCount::getCurrentUnitName,
Collectors.groupingBy(
CurrentTransactionsCount::getAssistCeanDept)
)
));

收集list 以某两个字段分组,并以进行统计数量

Map<String, Map<Integer, Long>> map = pfaDeptProblemPos.stream().collect(
Collectors.groupingBy(
PfaDeptProblemPo::getThreeUnitName,
Collectors.groupingBy(PfaDeptProblemPo::getProblemType, Collectors.counting())));

收集list 以某两个字段分组,并以进行统计合计(需要判空处理)

Map<String, Map<String, BigDecimal>> map = s1.collect(
Collectors.groupingBy(
CurrentTransactionsCount::getCurrentUnitName,
Collectors.groupingBy(
CurrentTransactionsCount::getAssistCeanDept,
Collectors.reducing(
BigDecimal.ZERO,
e -> e.getBalance() != null ? e.getBalance() : BigDecimal.ZERO,
BigDecimal::add)
)
));

收集list中某个BigDecimal属性并统计

 BigDecimal sum = list.stream().filter(e -> e.getDebitAmount() != null).map(TVoucherDetail::getDebitAmount).reduce(BigDecimal.ZERO,BigDecimal::add);

收集list中某些属性映射到新的集合中

 // 使用map操作将Person对象映射到PersonDTO对象,并收集到新的List<PersonDTO>中
List<PersonDTO> personDTOs = people.stream()
.map(person -> new PersonDTO(person.getId(), person.getName())) // 创建新的PersonDTO对象
.collect(Collectors.toList()); // 收集到List中

收集list集合以某个属性为键,以本身为值为map

Map<String, UserInfo> phoneNumberMap = list.stream()
.collect(Collectors.toMap(
UserInfo::getPhoneNumber(), // Key Mapper: 从每个UserInfo对象中提取电话号码作为Map的键
Function.identity(), // Value Mapper: 使用UserInfo对象本身作为Map的值
(v1, v2) -> v1 // Merge Function: 如果存在键冲突(即两个UserInfo对象有相同的电话号码),则保留第一个对象(v1),丢弃第二个对象(v2)
));

收集list集合中的对象,映射到另个一对象集合中

    List<Person> people = Arrays.asList(
new Person("1", "Alice", 30, "123 Street"),
new Person("2", "Bob", 25, "456 Avenue")
);
// 使用map操作将Person对象映射到PersonDTO对象,并收集到新的List<PersonDTO>中
List<PersonDTO> personDTO = people.stream()
.map(person -> new PersonDTO(person.getId(), person.getName())) // 创建新的PersonDTO对象
.collect(Collectors.toList()); // 收集到List中

根据list对象集合中某个属性去重

 List<Person> persons = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Alice", 28), // 重复的name
new Person("Charlie", 35)
); Collection<Person> values = persons.stream().collect(Collectors.toMap(
Person::getName,
Function.identity(),
(old, n) -> old
)).values(); values.forEach(System.out::println);

jdk8的Steam流工作常用方法总结的更多相关文章

  1. JDK8 Steam流操作

    原文:https://github.com/niumoo/jdk-feature/blob/master/src/main/java/net/codingme/feature/jdk8/Jdk8Str ...

  2. 功能:Java8新特性steam流

    Java8新特性steam流 一.包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Int ...

  3. JDK8中函数式流编程推荐

    强烈推荐使用Java8中函数流API库来处理集合相关的数据,今天又看来一个项目代码里面用到来很多这样的处理,基本上可以解决大部分遍历问题.并且代码简洁清晰. JAVA8与lambda表达式 JDK8  ...

  4. jdk8的stream流式计算的操作

    jdk8之后增加了流式计算,现在根据学习了流式计算,并把过程记录下来: Person.java的bean package com.zhang.collectordemo; /** * @program ...

  5. Jdk8中Stream流的使用,让你脱离for循环

    学习要求: 知道一点儿函数式接口和Lambda表达式的基础知识,有利于更好的学习. 1.先体验一下Stream的好处 需求:给你一个ArrayList用来保存学生的成绩,让你打印出其中大于60的成绩. ...

  6. 这些Stream流的常用方法你得记住,步骤简单不麻烦!

    forEach遍历 /* forEach:该方法接收一个Consumer接口函数,将每一个流元素交给该函数处理 简单记: forEach方法:用来遍历流中的数据 是一个终结方法,遍历之后就不能继续调用 ...

  7. JDK8 新特性流式数据处理

    https://blog.csdn.net/canot/article/details/52957262

  8. 【JDK8】Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  9. (六)jdk8学习心得之Stream流

    六.Stream流 1. 什么是stream流 现阶段,可以把stream流看成一个高级版的Iterator.普通的Iterator只能实现遍历,遍历做什么,就需要具体些功能代码函数了.而这个stre ...

  10. Stream流思想和常用方法

    一.IO流用于读写:Stream流用于处理数组和集合数据: 1.传统集合遍历: 2.使用Stream流的方式过滤: 其中,链式编程(返回值就是对象自己)中,filter使用的是Predicate函数式 ...

随机推荐

  1. hbase第一课:hbase-2.2.7分布式搭建

    hbase-2.2.7分布式搭建文档 1.上传解压配置环境变量 # 1.解压 tar -xvf hbase-2.2.7-bin.tar.gz.gz # 2.配置环境变量 vim /etc/profil ...

  2. 高通平台抓ram dump

    高通平台抓ram dump 原文(有删改):https://blog.csdn.net/m0_37166404/article/details/80821600 背景 高通平台下提供了一个工具,专门用 ...

  3. Nuxt3 的生命周期和钩子函数(七)

    title: Nuxt3 的生命周期和钩子函数(七) date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要:文章阐述了Nuxt ...

  4. 哇塞,实测780MB/s!基于RK3568J与FPGA的PCIe通信案例详解

    ARM + FPGA架构有何种优势 近年来,随着中国新基建.中国制造2025的持续推进,单ARM处理器越来越难满足工业现场的功能要求,特别是能源电力.工业控制.智慧医疗等行业通常需要ARM + FPG ...

  5. ubuntu20 python2 通过安装包安装mysql-python

    前言 众里寻他千百度,蓦然回首,那人却在灯火阑珊处. 最近要测试一个python2环境的代码,其中用到了MySQLdb, 查询网络,发现要安装mysql-python,于是就进行了一番艰难的探索,现在 ...

  6. FSCTF 2023(公开赛道)WP

    FSCTF 2023 ID:Mar10 Rank:6 总结:下次看到不正常报错一定重新安装一遍工具~~ web 源码!启动! 就在源码注释里 <!-- 师傅们,欢迎来到CTF的世界~ NSSCT ...

  7. VulnHub-DC-7渗透流程

    DC-7 kali:192.168.157.131 靶机:192.168.157.151 信息收集 nmap -sV -A -p- 192.168.157.151 虽然有robots.txt等敏感文件 ...

  8. SpringCloud连接远程nacos报错,一直提示连接本地的localhost:8848

    application.properties spring.cloud.nacos.discovery.server-addr=xxx.xxx.xxx.xxx:8848 spring.applicat ...

  9. 【算法】用c#实现计算方法中的经典降幂优化策略,减少计算复杂度

    对于给定的数组[x1,x2,x3,-,xn],计算幂的累积:x1^(x2^(x3^(-^xn))的最后一位(十进制)数字. 例如,对于数组[3,4,2],您的代码应该返回1,因为3^(4^2)=3^1 ...

  10. CSS+JS 实现动态曲线进度条

    由于系统UI风格升级,产品童鞋和UI童鞋总是想要搞点儿事情出来,项目页面上的进度条从直线变成了曲线,哈哈,好吧,那就迎难而上 实现效果: 1.简单搞一搞 CSS , 此处代码有折叠 .process ...