Java8 Stream流的合并_全球消息
时间:2023-05-06 04:53:05
来源:博客园
(资料图)
最近的需求里有这样一个场景,要校验一个集合中每个对象的多个Id的有效性。比如一个Customer对象,有3个Id:id1
,id2
,id3
,要把这些Id全部取出来,然后去数据库里查询它是否存在。
@Data@AllArgsConstructorpublic class Customer { private String name; private String id1; private String id2; private String id3;}
在通常情况下,我们要从集合中取出一个对象属性,很好办,用这个办法:
customerList.stream().map(Customer::getId1).filter(Objects::nonNull).collect(Collectors.toList())
现在要取3个字段,怎么做呢?
Stream.concatStream接口中的静态方法concat,可以把两个流合成一个,我们取3个字段可以合并两次:
Stream concat = Stream.concat(customerList.stream().map(Customer::getId1),customerList.stream().map(Customer::getId2));List ids = Stream.concat(concat, customerList.stream().map(Customer::getId3)) .filter(Objects::nonNull) .collect(Collectors.toList());
取4个字段,就再继续合并。但是这种不够简洁,可以使用扁平化流flatMap。
flatMapflatmap方法让你把一个流中的每个值都换成另一个流,然后把所有的流连接起来成为一个流。
Stream.flatMap
方法的入参为一个Function函数,函数返回值的泛型要求为Stream类型。对比一下,map
和flatMap
都是将流中的元素映射为我们想要的值,只是flatMap
映射的结果是一个新的Stream。
而Stream.of
方法刚好可以构建一个类型为Stream的原始流,以供flatMap
操作。
List ids = Stream.of(customerList.stream().map(Customer::getId1), customerList.stream().map(Customer::getId2), customerList.stream().map(Customer::getId3)) .flatMap(idStream -> idStream) .filter(Objects::nonNull) .collect(Collectors.toList());
注意,Stream.of方法返回的流的泛型跟方法入参的类型是一样,上面的代码就相当于,Stream.of(stream, stream, stream)
, 得到的结果就是Stream
,紧接着用flatMap
扁平化处理,把每一个元素合成一个新流。
标签:
- Java8 Stream流的合并_全球消息
- 2020年上海高考作文范文(3篇) 环球即时
- 瀚海阑干百丈冰的阑干是什么意思_阑干是什么意思|世界观察
- 武汉平均工资2019官方_武汉平均工资2019|环球新视野
- 天天热点评!南靖县领导下沉一线推动征迁工作!
- 校园春色你我色
- “全国最具创新力博物馆”推介名单公布 我省两家入围|焦点消息
- 【环球新视野】跑跑卡丁车名字颜色喷漆_跑跑卡丁车名字
- 太阳黑子周期性_太阳黑子周期
- 男子深夜持棍拦车寻撞母逃逸司机?村委会:他精神有问题
- 第十届乌镇戏剧节将于10月19日至10月29日举办
- 惠州惠阳:团购买房折扣可低至八折 首套房商贷最低首付两成
- 环球实时:2023全球CRO市场整体增速与研发投入
- 阿根廷侨社资助福清外籍华裔学生现状调研
- 环球快讯:Airspeed获得750万美元种子轮融资
- 中国重汽:累计回购约587万股,占比0.5%
- 全球热讯:8组数字感受五一假期有多火爆
- 世界新动态:五一期间三亚亚特兰蒂斯水世界水族馆共接待9.2万人次,同比增长343%
- 新宙邦:波兰锂离子电池电解液等项目将于二季度投产|每日简讯
- 特斯拉首次将汽车从中国运往北美,大概率为Model Y 后驱版
- 环球新动态:文成县气象台发布暴雨黄色预警【Ⅲ级/较重】【2023-05-05】
- 【天天新要闻】台男卖地打赏400万台币想交往, 女子3度拒绝却遭压地殴打
- 观焦点:手机广告拦截软件_手机广告拦截
- 有哪些古诗是 古诗50首有哪些?
- 【世界新视野】制造事故骗取理赔 两名保险人员被处罚
- 让“草根创客”在数字乡村中蓄力成长
- 俞敏洪建议24节气都放假:让孩子们跟大自然亲近-全球热消息
- 今日聚焦!滦河玛瑙图片大全_滦河
- 世界速看:中国石化氢能参股企业高质量发展座谈会在沪召开
- 天天播报:up盘装系统格式化工具-()
x
广告
x
广告