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

  • 一般企业网站推广十大方法(企业网站的一般内容)

    一般企业网站推广十大方法(企业网站的一般内容)

  • 为什么抖音改不了昵称(为什么抖音改不了名字)

    为什么抖音改不了昵称(为什么抖音改不了名字)

  • 怎么取消互动播放(怎么取消互动播报功能)

    怎么取消互动播放(怎么取消互动播报功能)

  • qq怎么把朋友拉黑(qq怎么将好友拉进群聊)

    qq怎么把朋友拉黑(qq怎么将好友拉进群聊)

  • 屏幕进水有竖线会自己消失吗(屏幕进水有竖线可以充电吗)

    屏幕进水有竖线会自己消失吗(屏幕进水有竖线可以充电吗)

  • 12306账号是手机号码吗(12306账号手机号和身份证不符合怎么办)

    12306账号是手机号码吗(12306账号手机号和身份证不符合怎么办)

  • 微信朋友圈发字不发图片怎么发(微信朋友圈发字怎么发)

    微信朋友圈发字不发图片怎么发(微信朋友圈发字怎么发)

  • 唱吧话筒可以用在全民k歌吗(唱吧话筒用法)

    唱吧话筒可以用在全民k歌吗(唱吧话筒用法)

  • 拼多多怎么看勋章墙(拼多多如何看自己的勋章)

    拼多多怎么看勋章墙(拼多多如何看自己的勋章)

  • 腾讯视频vip缓存看不了(腾讯视频vip缓存视频没vip怎么办)

    腾讯视频vip缓存看不了(腾讯视频vip缓存视频没vip怎么办)

  • 华为mate30后面四个孔只有三个摄像头

    华为mate30后面四个孔只有三个摄像头

  • 为什么苹果手机的邮件无法使用(为什么苹果手机屏幕亮度突然变暗)

    为什么苹果手机的邮件无法使用(为什么苹果手机屏幕亮度突然变暗)

  • 爱奇艺的弹幕是即时的吗(爱奇艺的弹幕是评论吗)

    爱奇艺的弹幕是即时的吗(爱奇艺的弹幕是评论吗)

  • 微信账单被删怎么恢复(微信账单被删怎么查)

    微信账单被删怎么恢复(微信账单被删怎么查)

  • 华为怎么修改时间(华为怎么修改时间为24小时)

    华为怎么修改时间(华为怎么修改时间为24小时)

  • 快手号被限流几天恢复(快手限流后账号会被养回来吗)

    快手号被限流几天恢复(快手限流后账号会被养回来吗)

  • 苹果无线耳机怎么下一曲(苹果无线耳机怎么查真伪)

    苹果无线耳机怎么下一曲(苹果无线耳机怎么查真伪)

  • 拼多多怎么关闭自动抽奖(拼多多怎么关闭免密码支付)

    拼多多怎么关闭自动抽奖(拼多多怎么关闭免密码支付)

  • mt712ch/a是不是国行(型号mt722ch/a)

    mt712ch/a是不是国行(型号mt722ch/a)

  • qq占用内存太大了怎么办(qq占用内存太大怎么设置)

    qq占用内存太大了怎么办(qq占用内存太大怎么设置)

  • vivos1屏幕分辨率在哪里调(vivos1的分辨率)

    vivos1屏幕分辨率在哪里调(vivos1的分辨率)

  • 快影如何添加字幕(快影如何添加字幕和文字)

    快影如何添加字幕(快影如何添加字幕和文字)

  • 苹果怎么锁软件(苹果怎么锁软件加密)

    苹果怎么锁软件(苹果怎么锁软件加密)

  • windows10如何分区(windows10怎么分区)

    windows10如何分区(windows10怎么分区)

  • mgaqdesk.exe进程有什么作用  mgaqdesk进程查询

    mgaqdesk.exe进程有什么作用 mgaqdesk进程查询

  • 马德拉岛的北海岸,葡萄牙 (© Hemis/Alamy)(马德拉群岛旅游攻略)

    马德拉岛的北海岸,葡萄牙 (© Hemis/Alamy)(马德拉群岛旅游攻略)

  • Pytorch优化器全总结(三)牛顿法、BFGS、L-BFGS 含代码(python优化工具箱)

    Pytorch优化器全总结(三)牛顿法、BFGS、L-BFGS 含代码(python优化工具箱)

  • 咨询合同按什么交印花税
  • 公务员抚恤费
  • 不知道进价怎么求利润
  • 应付账款周转率和存货周转率公式
  • 公司支付宝收款二维码怎么弄
  • 上季度忘记申报个税了
  • 投资收益科目在贷方
  • 财务上大写的元怎么写
  • 非营利组织的项目管理流程包括
  • 公允价值变动损益属于什么科目
  • 个人可支配收入缩写
  • 事业单位大型修缮会计分录
  • 企业贷款核销条件
  • 营改增后哪些费用可以抵扣
  • 所得税弥补亏损年限10
  • 民办幼儿园所得税优惠政策
  • 建筑业简易征收差额征税的计算案例
  • 递延和摊销
  • 开票超过离线时长怎么解决
  • 股东增资印花税税目
  • 购进农产品再销售
  • 员工福利费用会计怎么做
  • 物流公司运费的会计分录
  • 金银制成的金银币及摆件是否征收消费税?
  • 当月开发票收到货款会计应该以什么为做账凭证?
  • windows 10如何清除联网记录
  • 七彩虹主板 wol
  • 小公司做帐
  • 怎么添加动态磁贴
  • 公共基础设施的英语
  • 使用二氧化碳灭火器时人应该站在什么位置
  • 哪些支出可以计入成本科目
  • phpsystem函数
  • thinkphp跨域解决方案
  • 应交城建税怎么算
  • 企业发生的利得或损失应计入企业的营业外收支
  • php实现图片上传
  • 小规模纳税人什么意思
  • 本期进项税额明细表为什么数据一直出不来
  • phpcms插件
  • 外币汇兑损益怎么计算
  • 资产负债表递延所得税资产计算公式
  • 科技公司技术服务费税率
  • 公司吸收合并流程详细步骤
  • 用发票做账是什么意思?
  • 个人所得税由单位还是个人缴纳
  • 文化事业建设税是含税还是不含税
  • 与广告公司签个协议
  • 委托加工业务中需要计算缴纳增值税销项税
  • 领用库存商品用于生产产品
  • 在职职工在单位应享受哪些待遇
  • 增值税进项税额转出的情况有哪些
  • 公司代扣代缴社保什么意思
  • 非同一控制下企业合并,企业合并成本包括
  • 总公司和分公司如何分离
  • 自产商品无偿赠送是否确认收入
  • 事业单位打款多久到账
  • 企业会计制度怎么写
  • 房屋装修费用的会计科目
  • 如何办icp许可证
  • 营业收入和销售收入的比值
  • 删除用户mysql
  • 自动清理河道垃圾船
  • mysql alter table命令修改表结构实例
  • centos怎么调出终端
  • linux操作系统安装包
  • win10系统怎么关闭病毒防护
  • 快速关机的快捷方式
  • 微软反盗xp黑屏怎么办
  • win10画图功能
  • 按developer.android.com安装新的环境
  • 轨迹球怎么调出来
  • 服务器防arp欺骗怎么解决
  • unity协程的工作原理
  • 安卓自定义状态栏图标
  • Android屏幕适配分屏
  • cocos2d安装
  • 深圳微信税务局登录不了
  • 机票电子发票怎么作废
  • 江西自考招考办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设