java8的collectors怎么使用
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容介绍了"java8的collectors怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
奉贤区数据软件开发质量保障
王者选择的服务器太多了怎么办
2021 数据库大会
网络安全应该注意些什么
数据库大
网民创造网络安全
pot 软件开发
软件开发mac mini心得
北京京洲融华网络技术有限公司
开平市中心医院网络安全等级保护
计算机网络技术职业技术要求
大学周末教育网络安全
网络安全技术大赛复赛时间
发卡网数据库多久备份一次
网络安全三年级简单画
总数据库创建
临沂合越网络技术
北京lol服务器云服务器
混合模型怎么录入数据库
安可信网络安全公司
软件开发组织方式演化
数据库蓝桥杯
做软件开发销售从哪里找客户
绍兴侠依网络技术有限公司
我的世界服务器该怎么装饰
网络安全帽使用方法
电信速度快的apn服务器
数据库科目余额表是哪一个
我的世界武器服务器
杨铮网络安全