位置: IT常识 - 正文

[进阶] list 过滤 stream 的lambda进阶操作, 这一篇就够了(list集合过滤)

编辑:rootadmin

目录

1. list转化map基本操作

id最常用方式: 

-> 01  key-value值形式:

-> 02 id-> 对象本身

-> 03 id-> 对象本身的 lambda写法

->04  解决冲突的key

2. list计算操作

3. list转化泛型操作

4. List转成map的进阶操作

 ->4.1  有实体类的进阶操作(常用)

--->准备工作01 :  基础数据(User实体类)

--->4.1.1:  (1对1关系) 分组: 用户名-> 用户实体类对象User(String->T)

 --->4.1.2  (1对1关系) 用户名 -> 电话号(String-> String)

--->4.1.301:  (1对多) 分组01: 根据年龄分组  Integer-> List 

--->4.1.302:  (1对多) 分组01: 根据年龄分组  Integer-> List 方法二

--->4.1.4:  (1对多) 分组 根据年龄分出 年龄-> 用户 Integer -> List

-> 4.2 没有实体类的进阶操作

[待续未完....时间有限]

-> 5. 总结: 4整个的main方法

-> 5..1 不啰嗦 直接上代码


1. list转化map基本操作id最常用方式: -> 01  key-value值形式:Map<Integer,String>map = list.stream().collect(Collectors.toMap(User::getId,User::getRealName))-> 02 id-> 对象本身 Map<Integer,User> userMap3 = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));-> 03 id-> 对象本身的 lambda写法Map<Integer,User> userMap2 = userList.stream().collect(Collectors.toMap(User::getId,User->User));->04  解决冲突的keyMap<Integer,User> userMap4 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(),(key1,key2)->key2));2. list计算操作List<Long> testList = new ArrayList<>(Collections.nCopies(5, 0L)); testList.set(0,1L); testList.set(1,2L); testList.set(2,3L); testList.set(3,4L); testList.set(4,5L); System.out.println("sum1 is " + testList.stream().reduce(0L, (a, b) -> a + b)); // reduce根据初始值(参数1)和累积函数(参数2)依次对数据流进行操作,第一个值与初始值送入累积函数,后面计算结果和下一个数据流依次送入累积函数。 System.out.println("sum2 is " + testList.stream().reduce(0L, Long::sum)); System.out.println("sum3 is " + testList.stream().collect(Collectors.summingLong(Long::longValue))); // Collectors.summingLong()将流中所有元素视为Long类型,并计算所有元素的总和 System.out.println("sum4 is " + testList.stream().mapToLong(Long::longValue).sum()); System.out.println("***********************"); List<Person> testList1 = new ArrayList<>(Collections.nCopies(5, new Person(1))); System.out.println("class sum1 is " + testList1.stream().map(e -> e.getAge()).reduce(0, (a,b) -> a + b)); System.out.println("class sum2 is " + testList1.stream().map(e -> e.getAge()).reduce(0, Integer::sum)); System.out.println("class sum3 is " + testList1.stream().collect(Collectors.summingInt(Person::getAge))); System.out.println("class sum4 is " + testList1.stream().map(e -> e.getAge()).mapToInt(Integer::intValue).sum());3. list转化泛型操作 List<User> list = userMapper.selectUserMessage(null); List<UserRespDTO> collect = list.stream().map(dto-> { UserRespDTO userRespDTO = new UserRespDTO(); BeanUtils.copyProperties(dto, respDTO); return userRespDTO; }).collect(Collectors.toList());4. List转成map的进阶操作 ->4.1  有实体类的进阶操作(常用)--->准备工作01 :  基础数据(User实体类)import com.fasterxml.jackson.annotation.JsonFormat;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;import java.util.Date;/** * 模拟用户实体类对象 * * @author pzy * @version 0.1.0 */@Data@NoArgsConstructor@AllArgsConstructor@Accessors(chain = true)public class User { private String username; private Integer age; private String telephone; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime;}

推荐整理分享[进阶] list 过滤 stream 的lambda进阶操作, 这一篇就够了(list集合过滤),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:list集合过滤,java list过滤,list filter过滤,java list过滤,list filter过滤,list过滤list,list过滤list,list过滤指定条件,内容如对您有帮助,希望把文章链接给更多的朋友!

[进阶] list 过滤 stream 的lambda进阶操作, 这一篇就够了(list集合过滤)

---> 准备工作02: 

//1. 创建基础数据 List<User> list = new ArrayList<>(); User user1 = new User("张三", 33, "13345678913", new Date()); User user2 = new User("李四", 44, "13345678914", new Date()); User user3 = new User("王五", 55, "13345678915", new Date()); User user4 = new User("李六", 55, "13345678916", new Date()); list.add(user1); list.add(user2); list.add(user3); list.add(user4);--->4.1.1:  (1对1关系) 分组: 用户名-> 用户实体类对象User(String->T)Map<String, User> map1 = list.stream().collect(Collectors.toMap(User::getUsername, each -> each, (value1, value2) -> value1)); System.out.println(JSON.toJSONString(map1));

 //{"李四":{"age":44,"createTime":1679536527360,"telephone":"13345678914","username":"李四"},"张三":{"age":33,"createTime":1679536527360,"telephone":"13345678913","username":"张三"},"李六":{"age":55,"createTime":1679536527360,"telephone":"13345678916","username":"李六"},"王五":{"age":55,"createTime":1679536527360,"telephone":"13345678915","username":"王五"}}

 --->4.1.2  (1对1关系) 用户名 -> 电话号(String-> String) Map<String,String> map2 = list.stream().collect(Collectors.toMap(User::getUsername,User::getTelephone,(value1, value2) -> value1)); System.out.println(JSON.toJSONString(map2));

//{"李四":"13345678914","张三":"13345678913","李六":"13345678916","王五":"13345678915"}

--->4.1.301:  (1对多) 分组01: 根据年龄分组  Integer-> List<T> Map<Integer, List<User>> map301 = list.stream().collect(Collectors.groupingBy(User::getAge)); System.out.println(JSON.toJSONString(map301));//{33:[{"age":33,"createTime":1679536527360,"telephone":"13345678913","username":"张三"}],55:[{"age":55,"createTime":1679536527360,"telephone":"13345678915","username":"王五"},{"age":55,"createTime":1679536527360,"telephone":"13345678916","username":"李六"}],44:[{"age":44,"createTime":1679536527360,"telephone":"13345678914","username":"李四"}]}--->4.1.302:  (1对多) 分组01: 根据年龄分组  Integer-> List<T> 方法二Map<Integer,List<User>> map302 = list.stream().collect(Collectors.toMap(User::getAge, Collections::singletonList,(value1, value2) -> { List<User> union = new ArrayList<>(value1); union.addAll(value2); return union; })); System.out.println(JSON.toJSONString(map302));//{33:[{"age":33,"createTime":1679536527360,"telephone":"13345678913","username":"张三"}],55:[{"age":55,"createTime":1679536527360,"telephone":"13345678915","username":"王五"},{"age":55,"createTime":1679536527360,"telephone":"13345678916","username":"李六"}],44:[{"age":44,"createTime":1679536527360,"telephone":"13345678914","username":"李四"}]}--->4.1.4:  (1对多) 分组 根据年龄分出 年龄-> 用户 Integer -> List<String>

业务: 想查看每个年龄下都有谁(姓名即可)

Map<Integer,List<String>> map4 = list.stream().collect(Collectors.toMap(User::getAge,each->Collections.singletonList(each.getUsername()),(value1, value2) -> { List<String> usernameList = new ArrayList<>(value1); usernameList.addAll(value2); return usernameList; })); System.out.println(JSON.toJSONString(map4));//{33:["张三"],55:["王五","李六"],44:["李四"]}-> 4.2 没有实体类的进阶操作[待续未完....时间有限]-> 5. 总结: 4整个的main方法-> 5..1 不啰嗦 直接上代码 public static void main(String[] args) { //1. 创建基础数据 List<User> list = new ArrayList<>(); User user1 = new User("张三", 33, "13345678913", new Date()); User user2 = new User("李四", 44, "13345678914", new Date()); User user3 = new User("王五", 55, "13345678915", new Date()); User user4 = new User("李六", 55, "13345678916", new Date()); list.add(user1); list.add(user2); list.add(user3); list.add(user4); /*1. (1对1关系) 分组: 用户名-> 用户实体类对象User*/ Map<String, User> map1 = list.stream().collect(Collectors.toMap(User::getUsername, each -> each, (value1, value2) -> value1)); System.out.println(JSON.toJSONString(map1)); //{"李四":{"age":44,"createTime":1679536527360,"telephone":"13345678914","username":"李四"},"张三":{"age":33,"createTime":1679536527360,"telephone":"13345678913","username":"张三"},"李六":{"age":55,"createTime":1679536527360,"telephone":"13345678916","username":"李六"},"王五":{"age":55,"createTime":1679536527360,"telephone":"13345678915","username":"王五"}} /*2. (1对1关系) 用户名 -> 电话号 */ Map<String,String> map2 = list.stream().collect(Collectors.toMap(User::getUsername,User::getTelephone,(value1, value2) -> value1)); System.out.println(JSON.toJSONString(map2)); //{"李四":"13345678914","张三":"13345678913","李六":"13345678916","王五":"13345678915"} /*301. (1对多关系) 分组01: 根据年龄分组 目的: 将年龄相等的进行分组 年龄->用户实体类 */ Map<Integer, List<User>> map301 = list.stream().collect(Collectors.groupingBy(User::getAge)); System.out.println(JSON.toJSONString(map301)); //{33:[{"age":33,"createTime":1679536527360,"telephone":"13345678913","username":"张三"}],55:[{"age":55,"createTime":1679536527360,"telephone":"13345678915","username":"王五"},{"age":55,"createTime":1679536527360,"telephone":"13345678916","username":"李六"}],44:[{"age":44,"createTime":1679536527360,"telephone":"13345678914","username":"李四"}]} /*302. (1对多关系) 分组02: 根据年龄分组 目的: 将年龄相等的进行分组 年龄->用户实体类 */ Map<Integer,List<User>> map302 = list.stream().collect(Collectors.toMap(User::getAge, Collections::singletonList,(value1, value2) -> { List<User> union = new ArrayList<>(value1); union.addAll(value2); return union; })); System.out.println(JSON.toJSONString(map302)); //{33:[{"age":33,"createTime":1679536527360,"telephone":"13345678913","username":"张三"}],55:[{"age":55,"createTime":1679536527360,"telephone":"13345678915","username":"王五"},{"age":55,"createTime":1679536527360,"telephone":"13345678916","username":"李六"}],44:[{"age":44,"createTime":1679536527360,"telephone":"13345678914","username":"李四"}]} /*4. (1对多关系) 分组 根据年龄分出 年龄-> 用户 业务: 想查看每个年龄下都有谁(姓名即可)*/ Map<Integer,List<String>> map4 = list.stream().collect(Collectors.toMap(User::getAge,each->Collections.singletonList(each.getUsername()),(value1, value2) -> { List<String> usernameList = new ArrayList<>(value1); usernameList.addAll(value2); return usernameList; })); System.out.println(JSON.toJSONString(map4)); //{33:["张三"],55:["王五","李六"],44:["李四"]} }

创作不易, 点个赞再走呗~~~

本文链接地址:https://www.jiuchutong.com/zhishi/299268.html 转载请保留说明!

上一篇:基于OpenCV的人脸识别(基于opencv的人脸检测算法)

下一篇:H5项目如何打包成APP(h5项目怎么打包成app)

  • 简易征收预缴税率怎么算
  • 将自产货物赠送客户
  • 办理税务登记需要法人身份证原件吗
  • 网上代增值税专用发票流程
  • 资产负债表是根据什么填的
  • 社保计入主营业务成本
  • 用友无法录入现金流量怎么处理
  • 胶水开票开什么类目
  • 上年多计提增值税,今年如何调整
  • 增值税附加税由买方承担如何计算
  • 可以向国外账户汇人民币吗
  • 企业卫生费是指什么
  • 加工费发票可以不开数量吗
  • 合同副本和正本区别
  • 境内机构经常项目外汇账户
  • 残疾人收到房租租赁发票收入还要缴纳个税吗
  • 超出发票使用范围
  • 股息红利个人所得税扣税失败
  • 农产品增值税免税政策
  • 企业捐赠现金支出应在哪个项目反应
  • 个人承包劳务合法吗?
  • 进项税和销项税月末怎么结转
  • 汇兑损益怎么入账
  • 平销返利税率
  • 跨年的发票可以补开吗
  • 如何冲回以前年度账户
  • 结转收入怎么计算
  • 对公账户转私人账户有限额吗
  • php中file
  • 增值税发票开红字发票后账务处理?
  • 小狐狸803050
  • 补税的分录
  • 报废的设备怎么处理
  • linux+php
  • 手把手教你安装nvidia驱动
  • 固定资产清理的含义
  • 现金股利算负债吗
  • 一般纳税人普票可以抵扣吗
  • 普通发票添加货品名称步骤
  • windows安装mq
  • 非三包退车能否退款
  • 小微企业城建税及附加减免优惠
  • 跨月红字发票开错了可以撤销吗
  • 生产加工费税率
  • 增值税普票税额可以抵扣税吗
  • 新成立小规模纳税人税收优惠政策
  • 保险车辆理赔入账流程
  • 质量不合格怎么说
  • 营业利润率高好还是低好
  • 债务重组的方式不包括债务转为资本
  • 顺流交易为什么不考虑出售比例
  • 临时设施摊销属于什么资产
  • 用友作废的凭证怎么恢复
  • 伙食费占支出比例
  • 银行结息需要开发票吗
  • 企业经营规模小怎么办
  • mysql --help
  • linux临时目录在哪
  • win8怎么设置自动开机
  • openwrt 路由配置梯子
  • 删除windows.old文件夹后 桌面没有了
  • macbook怎么开启
  • RPDFLchr.exe - RPDFLchr是什么进程 有什么用
  • rnbrcache.exe是什么意思
  • 让人吃惊的成语有哪些
  • 如何深度理解
  • unity2d横版游戏源码
  • android studio unity3d
  • android开发之apritag
  • javascript教程完整版
  • jquery过滤选择器按照过滤规则分类包括?
  • javascript可以做动态网页吗
  • python基础教程入门
  • 印花税没有按时申报怎么办
  • 深圳电子税务局怎么查以前申报表
  • 纳税人分类分级管理四个匹配
  • 云南地方税务局电话
  • 怎么知道自己的城乡属性
  • 郑州高新税务局
  • 揭牌仪式揭牌时的音乐
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设