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. FreeRtos学习总结

    背景 最近项目需要,花了几天时间学习了FreeRTOS,因为之前有操作系统和底层的基础,所以上手非常快. 正文 基础篇 学习方法:建议先阅读本人整理的文章:再结合FreeRTOS文档官方的全英文档&l ...

  2. 【论文阅读】自动驾驶光流任务 DeFlow: Decoder of Scene Flow Network in Autonomous Driving

    再一次轮到讲自己的paper!耶,宣传一下自己的工作,顺便完成中文博客的解读 方便大家讨论. Title Picture Reference and pictures paper: https://a ...

  3. 全志科技A40i开发板规格书(四核ARM Cortex-A7,主频1.2GHz)

    1.评估板简介 创龙科技TLA40i-EVM是一款基于全志科技A40i处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板,每核主频高达1.2GHz,由核心板和评估底板组成. 评估板接口资 ...

  4. Spring的全局(统一)异常处理

    异常处理的三种方式 使用 @ExceptionHandler 注解 实现 HandlerExceptionResolver 接口(SpringMVC) 使用 @RestControllerAdvice ...

  5. SpringBoot 对接美团闪购,检验签名,获取推送订单参数,text转json

    接口文档地址 订单推送(已确定订单):https://open-shangou.meituan.com/home/docDetail/177 签名算法:https://opendj.meituan.c ...

  6. Mac 完整卸载mysql

    依次执行 cd ~ sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/M ...

  7. Navicat for mysql 无法连接到虚拟机的linux系统下的mysql

    最近在linux Centos7版本的虚拟机上安装了一个MySql数据库,发现本地可以正常ping通虚拟机,但Navicat则无法正常连接到虚拟机里的MySql数据库,经过一番琢磨,发现解决这个问题的 ...

  8. memset函数&&bzro函数_C

    // Code file created by C Code Develop #include "ccd.h" #include "stdio.h" #incl ...

  9. Django 跨域访问POST请求需预先发送option请求问题处理方案

    跨域访问POST请求需预先发送option请求问题处理方案   By:授客 QQ:103355122 实践环境 Win 10 Python 3.5.4 Django-2.0.13.tar.gz 官方下 ...

  10. 单细胞测序最好的教程(十四)测序原始数据公开至NCBI数据库

    作者按 国内对于单细胞测序相关的中文教程确实不够全面,当然NCBI官网给的上传教程也比较详细了,所以变成了会者不难.本教程你现在可能用不上,但是你如果做单细胞测序,那么未来你一定会用上,建议收藏. 在 ...