jdk8的Steam流工作常用方法总结
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流工作常用方法总结的更多相关文章
- JDK8 Steam流操作
原文:https://github.com/niumoo/jdk-feature/blob/master/src/main/java/net/codingme/feature/jdk8/Jdk8Str ...
- 功能:Java8新特性steam流
Java8新特性steam流 一.包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Int ...
- JDK8中函数式流编程推荐
强烈推荐使用Java8中函数流API库来处理集合相关的数据,今天又看来一个项目代码里面用到来很多这样的处理,基本上可以解决大部分遍历问题.并且代码简洁清晰. JAVA8与lambda表达式 JDK8 ...
- jdk8的stream流式计算的操作
jdk8之后增加了流式计算,现在根据学习了流式计算,并把过程记录下来: Person.java的bean package com.zhang.collectordemo; /** * @program ...
- Jdk8中Stream流的使用,让你脱离for循环
学习要求: 知道一点儿函数式接口和Lambda表达式的基础知识,有利于更好的学习. 1.先体验一下Stream的好处 需求:给你一个ArrayList用来保存学生的成绩,让你打印出其中大于60的成绩. ...
- 这些Stream流的常用方法你得记住,步骤简单不麻烦!
forEach遍历 /* forEach:该方法接收一个Consumer接口函数,将每一个流元素交给该函数处理 简单记: forEach方法:用来遍历流中的数据 是一个终结方法,遍历之后就不能继续调用 ...
- JDK8 新特性流式数据处理
https://blog.csdn.net/canot/article/details/52957262
- 【JDK8】Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...
- (六)jdk8学习心得之Stream流
六.Stream流 1. 什么是stream流 现阶段,可以把stream流看成一个高级版的Iterator.普通的Iterator只能实现遍历,遍历做什么,就需要具体些功能代码函数了.而这个stre ...
- Stream流思想和常用方法
一.IO流用于读写:Stream流用于处理数组和集合数据: 1.传统集合遍历: 2.使用Stream流的方式过滤: 其中,链式编程(返回值就是对象自己)中,filter使用的是Predicate函数式 ...
随机推荐
- do{}while0的两个作用
1.作为一种防止宏错误展开的一种防御性写法. 相信很多人都知道,这里不展开了. 2.实现 goto 语句的功能,一次break就可以跳出到后续语句. do { if(...) break; ... } ...
- 《DNK210使用指南 -CanMV版 V1.0》第六章 Kendryte K210固件烧录
第六章 Kendryte K210固件烧录 1)实验平台:正点原子DNK210开发板 章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail. ...
- 【进阶篇】Java 项目中对使用递归的理解分享
[进阶篇]Java 项目中对使用递归的理解分享 目录 [进阶篇]Java 项目中对使用递归的理解分享 前言 一.什么是递归 1.1基本概念 1.2优缺点 1.3与迭代的区别 二.实际案例 三.改进方案 ...
- NXP i.MX 8M Mini开发板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)
1 评估板简介 创龙科技TLIMX8-EVM是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,由核心板和 ...
- OPC 数据采集 解决方案
笔者计划从此篇博客开始,详细介绍OPC数据采集采集过程.包括常用组态软件介绍,数据接入,OPC接入过程,常用OPC数据接入与处理全流程范例,分享相关案例Demo. 因为分享的都是个人实际工作经验中的 ...
- Git ignore 忽略文件不起作用
前提:拉取了项目上的代码,或者自己本地已经提交过了的文件.然后在 .gitignore 文件中添加了过滤,但是不管用,还是可以追踪 解决方案: 1.先删除本地的文件(可以备份到其他文件夹外) 2.然后 ...
- BigDecimal加减乘除、比较
// 加 a+b a.add(b); // 减 a-b a.subtract(b); // 乘 a*b a.multiply(b); // 除 a/b a.divide(b); // 绝对值 a.ab ...
- java后端解决请求跨域
跨域 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同 ...
- 第七节 JMeter基础-高级登录【数据驱动-参数化】
声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:一个接口的不同情况,其实就是请求参数不一样.期望结果不一样.把这些不一样的东西都提取出来进行管理,下次可以直接使用.因 ...
- Django 处理http请求之使用session
Django 处理http请求之使用session by:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 测试环境 Win7 Django 1.11 Django提供 ...