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

  • word字体颜色被锁定怎么改(word字体颜色被锁定,且修改旁边会出现记录)

    word字体颜色被锁定怎么改(word字体颜色被锁定,且修改旁边会出现记录)

  • 苹果12是oled屏吗(iphone 12是oled吗)

    苹果12是oled屏吗(iphone 12是oled吗)

  • 微信退群后消息还在吗(微信退群后消息记录还会显示群昵称吗)

    微信退群后消息还在吗(微信退群后消息记录还会显示群昵称吗)

  • 华为mate30视频美颜在哪里设置

    华为mate30视频美颜在哪里设置

  • 华为mate30前置摄像头模糊(华为mate30前置摄像头进水了怎么办)

    华为mate30前置摄像头模糊(华为mate30前置摄像头进水了怎么办)

  • 华为圆点悬浮怎么开启(华为圆点悬浮怎么截图)

    华为圆点悬浮怎么开启(华为圆点悬浮怎么截图)

  • ns接电视为什么没信号(ns连接电视不稳定)

    ns接电视为什么没信号(ns连接电视不稳定)

  • 苹果平板10.2英寸是哪个型号(苹果平板10.2英寸参数)

    苹果平板10.2英寸是哪个型号(苹果平板10.2英寸参数)

  • 腾讯会议黑屏怎么办(腾讯会议黑屏了)

    腾讯会议黑屏怎么办(腾讯会议黑屏了)

  • 华为p40与P40Pro有什么区别(华为p40和p40pro+)

    华为p40与P40Pro有什么区别(华为p40和p40pro+)

  • 电脑fast boot什么意思(电脑fast boot怎么设置)

    电脑fast boot什么意思(电脑fast boot怎么设置)

  • 微信搜索号码有记录吗(微信搜索号码也会频繁)

    微信搜索号码有记录吗(微信搜索号码也会频繁)

  • 学校的校园网络属于(学校的校园网络属于( ))

    学校的校园网络属于(学校的校园网络属于( ))

  • 华为智慧屏可以k歌吗(华为智慧屏可以玩ps5吗)

    华为智慧屏可以k歌吗(华为智慧屏可以玩ps5吗)

  • 电脑视频头怎么打开(电脑视频头怎么插线)

    电脑视频头怎么打开(电脑视频头怎么插线)

  • 如何解除小米手机开机密码(如何解除小米手环绑定手机)

    如何解除小米手机开机密码(如何解除小米手环绑定手机)

  • 文档锁定状态怎么解除(文档锁定状态怎么关闭)

    文档锁定状态怎么解除(文档锁定状态怎么关闭)

  • 怎么看抖音点赞的人(怎么看抖音点赞又取消的人)

    怎么看抖音点赞的人(怎么看抖音点赞又取消的人)

  • word横道图横线怎么画(word 横道图)

    word横道图横线怎么画(word 横道图)

  • 抖音拉黑会移除粉丝吗(抖音拉黑移除后对方的聊天记录还在吗)

    抖音拉黑会移除粉丝吗(抖音拉黑移除后对方的聊天记录还在吗)

  • 回收站大小可以调整吗(回收站大小可以自定义么)

    回收站大小可以调整吗(回收站大小可以自定义么)

  • 谷歌地图app怎么设置中文(谷歌地图app怎么看街景图)

    谷歌地图app怎么设置中文(谷歌地图app怎么看街景图)

  • oppoa59电池容量多大(oppoa59s电池)

    oppoa59电池容量多大(oppoa59s电池)

  • cad多段线(cad多段线快捷键命令)

    cad多段线(cad多段线快捷键命令)

  • macOS Big Sur更新了什么 macOS11.0值得升级吗(macos big sur更新后能改回来吗)

    macOS Big Sur更新了什么 macOS11.0值得升级吗(macos big sur更新后能改回来吗)

  • 借条写不好,也要吃大亏——借条应该如何写(借条字迹不清楚有效吗)

    借条写不好,也要吃大亏——借条应该如何写(借条字迹不清楚有效吗)

  • JS之location对象详解

    JS之location对象详解

  • Vue3中修改父组件传递到子组件中的值(全网少有)(vue修改父组件的值)

    Vue3中修改父组件传递到子组件中的值(全网少有)(vue修改父组件的值)

  • 进口洋酒能存放多少年
  • 一般纳税人的认定时间
  • 个人向公司提供劳务,开发票
  • 建筑安装服务的发票
  • 占地面积的计算公式
  • 刚成立的公司好不好
  • 公司产品的打样费入什么会计科目
  • 商贸企业增加值
  • 2019年小型微利企业优惠政策
  • 纳税人财务会计报表报送管理办法
  • 去外地装修
  • 工伤医疗费全赔吗
  • 超30日未备案
  • 收到增值税专用发票是已经付款了吗
  • 充值卡充值发票可以报销吗
  • 购入固定资产挂帐记其他应付款还是应付账款
  • 服务费公司的账务处理
  • 固定资产损失如何计提
  • 刻章的发票怎么做分录
  • 房贷利息在哪里能看到
  • 处置固定资产按残值还是净值
  • 火车票增值税什么意思
  • 往来款可以作为投资款吗
  • 生产企业原材料的订购与运输建模
  • 公司注销后股东承担责任的法律规定
  • 坏账准备的计提应当关注
  • 一般纳税人申报哪些税种
  • 月不超过10万,季不超过30万免什么税
  • 广播影视服务需要交文化事业建设费吗
  • 查账征收企业所得税季报怎么填
  • 往公户存钱怎么存最划算
  • 跨年发票能不能报销
  • php排队系统
  • avgserv9.exe是什么进程 avgserv9进程的详细介绍
  • 带息应收票据计息时
  • 潜亏挂账是什么意思
  • 工地需要安装什么标识牌
  • php类和对象
  • 吃鸡显卡推荐配置1060 5g
  • php phyon
  • 新会计准则里的现金流量的公式
  • 坏账准备属于哪一类账户
  • php正则函数内容匹配
  • svc语法
  • 汇算清缴应补税额为负数
  • vue3 hooks实现
  • 成功解决用英语怎么说
  • pytorch训练模型计算f1
  • 小规模申报增值税减免税申报明细表
  • 企业基金分红具体流程
  • 融资租赁各方
  • access怎么提取数据
  • 现金账怎么登记
  • 税务处理决定书撤销情形
  • 劳务公司账务处理实例
  • 住宿费用专票可以抵扣吗
  • 在建工程的消防要求
  • 以前年度损益调整账务处理分录
  • 收到税务局退还的个税手续费怎么入账
  • 开来发票没有付款可以进入费用吗?
  • 水利建设基金要预缴吗
  • 企业会计做账教程
  • 主营业务利润率反映了企业的什么能力
  • 电脑周边是什么
  • 虚拟机的ubuntu
  • iphone制造成本
  • 安装win7系统后进不了系统
  • win8出现蓝屏怎么修复
  • win7系统可移动的文件
  • windows7组织
  • windows10储存
  • Android触摸事件回调方法
  • js获取0-100随机数
  • python多进程模块
  • Python对象转列表
  • 山西一女子实名举报局长
  • 国家税务总局广州市税务局
  • 新疆地方税务局举报电话
  • 怎样以实际行动争取入团
  • 长途汽车车次号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设