位置: 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)

  • 关注了那么多公众号,你注意过他们的文案吗?(关注太多的公众号有什么坏处)

    关注了那么多公众号,你注意过他们的文案吗?(关注太多的公众号有什么坏处)

  • 网易云相册停运了吗(网易云相册登录入口)

    网易云相册停运了吗(网易云相册登录入口)

  • 小米mix3手机微信语音小窗口怎么关(小米mix3手机微信发了图片怎么相册里有)

    小米mix3手机微信语音小窗口怎么关(小米mix3手机微信发了图片怎么相册里有)

  • 微信扫一扫怎么变成全屏了(微信扫一扫怎么扫不了)

    微信扫一扫怎么变成全屏了(微信扫一扫怎么扫不了)

  • 手机出国怎样关闭数据(手机卡出国怎么停用)

    手机出国怎样关闭数据(手机卡出国怎么停用)

  • 美图秀秀显示网络连接不畅(美图秀秀显示网络出现问题怎么办)

    美图秀秀显示网络连接不畅(美图秀秀显示网络出现问题怎么办)

  • 公众号群发能被谁看到(公众号群发被永久限制怎么解除)

    公众号群发能被谁看到(公众号群发被永久限制怎么解除)

  • 联想鼠标怎么连接笔记本呢(联想鼠标怎么连接笔记本没有反应)

    联想鼠标怎么连接笔记本呢(联想鼠标怎么连接笔记本没有反应)

  • 华为mpencil连不上(华为mpencil连不上蓝牙也充不上电)

    华为mpencil连不上(华为mpencil连不上蓝牙也充不上电)

  • 耳机一个耳朵响一个耳朵不响(耳机一只耳朵响)

    耳机一个耳朵响一个耳朵不响(耳机一只耳朵响)

  • 苹果电脑切换大小写是哪个键(苹果电脑切换大屏幕快捷键是什么)

    苹果电脑切换大小写是哪个键(苹果电脑切换大屏幕快捷键是什么)

  • 华为手机存储权限是什么意思(华为手机存储权限被拒绝在哪里开启)

    华为手机存储权限是什么意思(华为手机存储权限被拒绝在哪里开启)

  • 淘宝几天自动默认好评(淘宝几天后自动付款)

    淘宝几天自动默认好评(淘宝几天后自动付款)

  • md513ch/a是ipad几代(md513j/a是ipad几)

    md513ch/a是ipad几代(md513j/a是ipad几)

  • 如何更新emui10(如何更新图表目录)

    如何更新emui10(如何更新图表目录)

  • iphone11pro怎么还原网络设置(苹果11pro如何)

    iphone11pro怎么还原网络设置(苹果11pro如何)

  • realmeQ怎么给应用加密(realme应用加密怎么设置)

    realmeQ怎么给应用加密(realme应用加密怎么设置)

  • 京东的必购码是什么(京东必购码是什么在哪里获得)

    京东的必购码是什么(京东必购码是什么在哪里获得)

  • 怎么找微信删除的好友(怎么找微信删除的人的聊天记录)

    怎么找微信删除的好友(怎么找微信删除的人的聊天记录)

  • xp系统任务栏在上面

    xp系统任务栏在上面

  • 如何删除退款售后的信息(怎么删除退款)

    如何删除退款售后的信息(怎么删除退款)

  • mac黑屏打不开(mac黑屏怎么办打不开机)

    mac黑屏打不开(mac黑屏怎么办打不开机)

  • 使用NTFS压缩功能节省硬盘空间(ntfs磁盘压缩)

    使用NTFS压缩功能节省硬盘空间(ntfs磁盘压缩)

  • Win10如何设置声音双通道 Win10设置声音双通道的方法(win10如何设置声音)

    Win10如何设置声音双通道 Win10设置声音双通道的方法(win10如何设置声音)

  • dedecms织梦显示副栏目文章的方法(织梦前台数据不能存入中文)

    dedecms织梦显示副栏目文章的方法(织梦前台数据不能存入中文)

  • 个体工商户怎么补交个人所得税
  • 应交消费税的税目
  • 应税工资怎么计算出来的
  • 本期盈余转入累计盈余下面什么科目
  • 银行入息是入几个月的
  • 企业购买的财产险可以在企业所得税前扣除
  • 分公司没有业务季报怎么处理
  • 劳务所得报酬
  • 车辆购置税如何查询
  • 增值税转型前后对比
  • 企业收到普通发票开错税率跨月重开后咋入账
  • 申请国家知识产权的条件
  • 流动资产投资的特点有
  • 首次购置增值税税控系统
  • 增值税普通电子发票
  • 备查账簿根据企业的实际需要设置没有固定的格式要求
  • 手工帐财务费用怎么结转
  • 营业收入大于营业成本居然亏损
  • 退税应纳税所得额4万交税多少
  • 期初建账分录
  • 运输发票备注规定
  • 应收账款与主营业务收入的比率
  • 附有退货条款的销售
  • 废品损失的核算方式主要有
  • php跨域解决方案
  • 长期借款利息和短期借款利息都应计入财务费用
  • neoDVD.exe - neoDVD是什么进程 有什么用
  • 有限公司股权转让怎么办理流程
  • 布拉格下雪
  • vit详解
  • 正则表达式在线生成器
  • 这可能是最好的144平米小平层户型
  • 财务章和公章下面数字一样吗
  • 其他应收款如何计提减值准备
  • 商业汇票的行为有哪些
  • 织梦使用手册
  • mysql中join的用法
  • mongo mysql区别
  • Python psd-tools如何转换文件
  • bkuzmic/jquerycrossdomaindataplugin
  • 资产负债表中其他应收款的计算公式
  • 以前年度损益调整结转到本年利润吗
  • 债券投资包含哪些
  • 2021年购买土地需要缴纳什么税
  • 无法收回的款项
  • 银行退汇怎么做会计分录
  • 劳务公司发放农民工工资要交个税吗
  • 资产处置损益如何在利润表中体现
  • 企业获得小微企业补贴
  • 利润表的营业成本包括管理费用吗
  • 手续费和利息费用的区别
  • 地税报表如何填写
  • win帮助系统在哪里
  • 启用与禁用的英文
  • cvi linux
  • fedora使用
  • 进程lsass.exe
  • 电脑硬件用途
  • win7系统如何创建管理员账户
  • 苹果Mac系统怎么切换输入法
  • win10系统保留分区可以删除吗
  • Windows下的写字板功能是
  • vim按键
  • selenium csdn
  • vim如何在文件中添加
  • Bullet(Cocos2dx)之内存泄露检测
  • 根据安全生产法的规定,生产经营单位
  • easyui combotree加载静态数据问题(选不上)解决方法
  • 在页面中输出当前字符串的长度
  • 范冰冰魔范学院杂志可爱公主风
  • XML、HTML、CSS与JS的区别整理
  • 浅谈编码,解码的意义
  • python crc
  • js实现网页收藏的方法
  • 源码搜索
  • 市直单位正职是市单位一把手吗
  • 移动办税12366
  • 购车绿本是什么样的?
  • 绵阳市十大纳税企业排名
  • 土地增值税如何入账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设