java8的collectors怎么使用
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本篇内容介绍了"java8的collectors怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2024年09月22日java8的collectors怎么使用
本篇内容介绍了"java8的collectors怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
java8中提供了对集合进行转化,然后进行归集的的操作。这就不得不提Collectors这个类了,真的很强大,我们看示例吧。
KeyAndValue a1 = new KeyAndValue().setName("kevin").setValue("lee");KeyAndValue a2 = new KeyAndValue().setName("kevin").setValue("lee");KeyAndValue a3 = new KeyAndValue().setName("kevin1").setValue("lee");KeyAndValue a4 = new KeyAndValue().setName("kevin1").setValue("123123");KeyAndValue a5 = new KeyAndValue().setName("kevin2").setValue("lee5");KeyAndValue a6 = new KeyAndValue().setName("kevin3").setValue("lee8");Listlist = Arrays.asList(a1, a2, a3, a4, a5, a6);
基础的toList、toSet、toMap就不讲了,简单易用,一看就会,我说说稍微复杂的。
collectingAndThen:使用collector进行归集,然后对归结的结果进行加工
Listcollect = list.stream().collect(Collectors.collectingAndThen(Collectors.mapping(a -> a.getValue(), Collectors.toList()), v -> { v.sort(Comparator.comparing(String::length).reversed());return v;}));System.out.println(collect);//[123123, lee5, lee8, lee, lee, lee]
groupingBy 分组操作:基于一个key值,对元素进行分组
Map> collect = list.stream().collect(Collectors.groupingBy(a -> a.getName()));System.out.println(JSON.toJSONString(collect));// {"kevin":[{"name":"kevin","value":"lee"},{"name":"kevin","value":"lee"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}Map > collect1 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName, Collectors.mapping(b -> b.getValue(), Collectors.toSet())));System.out.println(JSON.toJSONString(collect1));// {"kevin":["lee"],"kevin2":["lee5"],"kevin1":["123123","lee"],"kevin3":["lee8"]}Map > collect3 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName, Collectors.toSet()));System.out.println(JSON.toJSONString(collect3));// {"kevin":[{"name":"kevin","value":"lee"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}Map > collect4 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName,TreeMap::new, Collectors.toSet()));System.out.println(JSON.toJSONString(collect4));// {"kevin":[{"name":"kevin","value":"lee"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}
join 操作:对元素进行拼接,有三个方法。
String joinResult = list.stream().map(KeyAndValue::getName).collect(Collectors.joining());System.out.println(joinResult);//kevinkevinkevin1kevin1kevin2kevin3String joinResult1 = list.stream().map(KeyAndValue::getName).collect(Collectors.joining(","));System.out.println(joinResult1);// kevin,kevin,kevin1,kevin1,kevin2,kevin3String joinResult2 = list.stream().map(KeyAndValue::getName).collect(Collectors.joining(",","(",")"));System.out.println(joinResult2);// (kevin,kevin,kevin1,kevin1,kevin2,kevin3)
partitioningBy操作:基于断言对元素按true和false进行分组
Map> partitioningBy = list.stream() .collect(Collectors.partitioningBy(k -> k.getName().equals("kevin")));System.out.println(partitioningBy);//{false=[KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin1, value=123123), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)], true=[KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin, value=lee)]}Map > partitioningBy1 = list.stream() .collect(Collectors.partitioningBy(k -> k.getName().equals("kevin"), Collectors.mapping(v -> v.getValue(), Collectors.toList())));System.out.println(partitioningBy1);// {false=[lee, 123123, lee5, lee8], true=[lee, lee]}
min/minBy , max/maxBy 用法一致:使用一个比较器获得最大值或最小值
Optionalmin = list.stream().map(KeyAndValue::getName).min(Comparator.comparing(v->v.length()));System.out.println(min.get());//kevinOptional min1 = list.stream().min(Comparator.comparing(v->v.getValue().length()));System.out.println(min1.get());// KeyAndValue(name=kevin, value=lee)Optional min2 = list.stream().map(KeyAndValue::getName).collect(Collectors.minBy(Comparator.comparing(String::length)));System.out.println(min2.get());//kevinOptional min3 = list.stream().collect(Collectors.minBy(Comparator.comparing(v->v.getValue().length())));System.out.println(min3.get());// KeyAndValue(name=kevin, value=lee)
mapping操作:使用一个function对元素进行加工,然后使用collector进行收集
Listmapping = list.stream().collect(Collectors.mapping(v -> v.getValue().concat("agc"), Collectors.toList()));System.out.println(mapping);// 类似 Stream 先进行map操作,再进行collectList mapping_ = list.stream().map(v -> v.getValue().concat("agc")).collect(Collectors.toList());System.out.println(mapping_);// [leeagc, leeagc, leeagc, 123123agc, lee5agc, lee8agc]
toCollection:将元素按照顺序复制到另一个收集器(集合)中,类似于Collectors.toList()
ArrayListcollect1 = list.stream().collect(Collectors.toCollection(ArrayList::new)); System.out.println(collect1);// [KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin1, value=123123), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)]
根据某个属性进行去重
TreeSetcollect = list.stream().collect(Collectors.toCollection(() -> new TreeSet (Comparator.comparing(KeyAndValue::getName))));System.out.println(collect);// [KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)]
"java8的collectors怎么使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
元素
分组
内容
更多
知识
加工
复杂
实用
强大
最大
最小
一致
学有所成
接下来
三个
困境
基础
实际
属性
情况
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
换卡服务器
郑州专业软件开发多少钱
怎么删 筛选出来的数据库
大脚插件获取数据库设置
ap网络安全吗
tbc环境比较好的服务器
网络安全wf
全球最强的服务器芯片
数据库中服务器IP
杭州软件开发的公司有多少
泰能发卡提示门锁数据库错误
软件开发人工费入哪个成本
数据库查询 比平均分高的
网络安全内部实战攻防演练
网络安全试卷答案
标普互联网科技
北京访客管理软件开发怎么收费
服务器装什么驱动管理
app抢单软件开发高手
输出数据库字段消除重复行
网络安全小常识100条句子
广东常用软件开发价格表
黑龙江省公安厅网络安全处
宁波网络技术开发案例
计算机网络安全与策略的预期
cfhd服务器选择
软件开发需要开工令吗
苹果如何信任软件开发者
网页读取mysql数据库
小学生关于网络安全的文章