java8 中对 集合 List Map 常用操作

167 篇文章 3 订阅
订阅专栏

在这里插入图片描述
map 和 list 都数据 集合的一种
map 是 键值对的集合 类型
list 是 多个数据的集合

// map() 抽 集合里的 某个key 然后 放到集合里
// filter() 过滤 条件

// map 取出集合里的某个key 放到  新集合里 
// 方法一
List<Integer> sellerIds = orderCarts.stream().map(i -> Integer.valueOf(i.get("sellerId") + ""))
.distinct().collect(Collectors.toList());
 
//方法二
 List<Integer> enquiryOrderIds = stationEntryExitDetails.stream()
 .map(ServiceStationEntryExitDetail::getEnquiryOrderId)
 .distinct().collect(Collectors.toList());
      
    // 把list 里的 所有数据 抽出来 组成 map     当 key 的值 不能重复 
  //根据集合里的某个值 当map 的key  集合里的 某个值 当map里的值 变成新的map  
  Map<Integer, String> collect = miniappUsers.stream()
  .collect(Collectors.toMap(MiniappUser::getId, MiniappUser::getAvatar));
  
  
  // 根据集合里的某个值当 map 的key 把整个 list的值 重新赋给 map 里的值 变成新的map
  Map<Integer, BackendOrderDetail> backendOrderDetailMap = backendOrderDetails.stream()
  .collect(Collectors.toMap(BackendOrderDetail::getId, b -> b));
   
   //根据集合里的某个值 进行 分组  组成一个新的 map
  Map<Integer, List<ServiceStationEntryExit>> entryExitMap = response.getStationEntryExits()
  .stream().collect(Collectors.groupingBy(ServiceStationEntryExit::getFactoryId));
  
  // 根据list里的某个值 进行总和计算
  Integer numbers = statementOrders.stream().map(StatementOrder :: getNumber).reduce(Integer::sum).get();
  
    // 根据list里的某个值 进行 加的计算
  BigDecimal amounts = statementOrders.stream().map(StatementOrder :: getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
根据某个 值当key  抽取某个值 为list
 Map<String, List<String>> collect = ysFormUserRestrictList.stream()
                .collect(Collectors.groupingBy(YsFormUserRestrict::getFormTableCode,
                Collectors.mapping(YsFormUserRestrict::getField, Collectors.toList())));

按照类目分组:

Map<String, List<Product>> prodMap= prodList.stream().collect(Collectors.groupingBy(Product::getCategory));
 
//{"啤酒":[{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10},{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}],"零食":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5},{"category":"零食","id":2,"name":"饼干","num":2,"price":20},{"category":"零食","id":3,"name":"月饼","num":3,"price":30}]}
 

按照几个属性拼接分组:

Map<String, List<Product>> prodMap = prodList.stream().collect(Collectors.groupingBy(item -> item.getCategory() + "_" + item.getName()));
 
//{"零食_月饼":[{"category":"零食","id":3,"name":"月饼","num":3,"price":30}],"零食_面包":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5}],"啤酒_百威啤酒":[{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}],"啤酒_青岛啤酒":[{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10}],"零食_饼干":[{"category":"零食","id":2,"name":"饼干","num":2,"price":20}]}
 

根据不同条件分组

Map<String, List<Product>> prodMap= prodList.stream().collect(Collectors.groupingBy(item -> {
	if(item.getNum() < 3) {
		return "3";
	}else {
		return "other";
	}
}));
 
//{"other":[{"category":"零食","id":3,"name":"月饼","num":3,"price":30},{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10},{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}],"3":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5},{"category":"零食","id":2,"name":"饼干","num":2,"price":20}]}
 

多级分组
要实现多级分组,我们可以使用一个由双参数版本的Collectors.groupingBy工厂方法创 建的收集器,它除了普通的分类函数之外,还可以接受collector类型的第二个参数。那么要进 行二级分组的话,我们可以把一个内层groupingBy传递给外层groupingBy,并定义一个为流 中项目分类的二级标准。

Map<String, Map<String, List<Product>>> prodMap= prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.groupingBy(item -> {
	if(item.getNum() < 3) {
		return "3";
	}else {
		return "other";
	}
})));
 
//{"啤酒":{"other":[{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10},{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}]},"零食":{"other":[{"category":"零食","id":3,"name":"月饼","num":3,"price":30}],"3":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5},{"category":"零食","id":2,"name":"饼干","num":2,"price":20}]}}
 

按子组收集数据
求总数

Map<String, Long> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.counting()));
 
//{"啤酒":2,"零食":3}

求和

Map<String, Integer> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.summingInt(Product::getNum)));
 
//{"啤酒":13,"零食":6}

把收集器的结果转换为另一种类型

Map<String, Product> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(Product::getNum)), Optional::get)));
 
//{"啤酒":{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15},"零食":{"category":"零食","id":3,"name":"月饼","num":3,"price":30}}
 

联合其他收集器

Map<String, Set<String>> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.mapping(Product::getName, Collectors.toSet())));
 
//{"啤酒":["青岛啤酒","百威啤酒"],"零食":["面包","饼干","月饼"]}
 

java 交流群:984253785

Java 8List转换为Map对象方法
08-26
Java 8,将List转换为Map对象是一种非常实用的技术,特别是在处理大规模数据时非常有用。本文将详细介绍在Java 8List转换为Map对象的方法,并提供了多种实现方式。 首先,我们需要明确Map的key是什么?在这...
listview如何取出list存放的map的key对应的value
qq_53362396的博客
01-11 1477
listview如何取出list存放的data项的
Stream Collectors.groupingBy的四种用法 解决分组统计(计数、求和、平均数等)、范围统计、分组合并、分组结果自定义映射等问题
HO1_K的博客
10-28 6万+
基于Java8介绍Java stream Collectors.groupingBy 功能 使用 方法,对java Collectors.groupingBy()的可用方法进行一一举例介绍,如stream分组 stream分组计数 stream分组求和 stream分组聚合等,基于stream collect() 和 收集器 Collectors
JavaMapList、Set操作
最新发布
Bunny的博客
08-13 459
JavaMapList和Set是三种常用集合类型,它们各自有不同的特点和用途。下面是一些高级操作(骚操作)的示例,这些操作可以让你更高效地使用这些集合
Collectors.groupingBy
一片蓝蓝的云
09-08 5万+
Collectors.groupingBy根据一个或多个属性对集合的项目进行分组 代码如下: public class ListToMapTest { public static void main(String[] args) throws ParseException { List<User> users = Arrays.asList( new User("Jack",9), new Use
java8的Collectors.groupingBy用法
热门推荐
兴国-为梦想而战
10-13 26万+
Collectors.groupingBy根据一个或多个属性对集合的项目进行分组 数据准备: public Product(Long id, Integer num, BigDecimal price, String name, String category) { this.id = id; this.num = num; this.price = price; this.name =...
stream( ).collect ( Collectors.groupingBy ( ) ) 的用法
小丁的博客
05-24 5728
Java 8 引入的 Stream API 的一个收集器(Collector),它用于将流(Stream)的元素根据某个分类函数收集到 Map 。这个 Map 的键是分类函数的返回是流对应键的所有元素的列表(List)。枚举类型,是另一个 Map,该 Map 的键是年龄(Integer),是符合这两个条件的。在 Java 是一个非常有用的工具,它允许你以简洁且声明式的方式 对流的元素进行。是一个常用的函数式编程方法,用于将流的元素根据指定的分类器函数分组,并收集到一个。
Java集合Set、ListMap的遍历方法
09-04
Java集合框架提供了多种接口和类,如Set、ListMap,它们各自有不同的特性和用途。本文将详细介绍如何遍历这些集合类型的实例。 首先,我们来看Set集合。Set接口代表不包含重复元素的集合,它的遍历方法主要有两种...
java8从list集合取出某一属性的集合案例
08-18
Java8,我们可以使用流式编程从List集合取出某一属性的集合。下面是一个简单的示例代码: ```java List<Order> list = new ArrayList(); Order o1 = new Order("1","MCS-2019-1123"); list.add(o1 ); ...
java8快速实现Listmap 、分组、过滤等操作
08-25
Java 8 提供了许多强大的功能来处理集合数据,包括 ListMap、分组、过滤等操作。本文将通过示例代码详细介绍如何使用 Java 8 的新特性来实现这些操作ListMapJava 8 ,可以使用 Collectors.to...
Java8 用Lambda表达式给List集合排序的实现
08-25
本文主要介绍了Java8 使用Lambda表达式给List集合排序的实现,通过示例代码详细地介绍了整个排序过程,涵盖了顺序排序、逆序排序和多条件排序等多种情况。 Lambda表达式与函数式编程 在Java8 ,Lambda表达式是...
Java8 Stream 之groupingBy 分组讲解
qq_36577291的博客
08-11 7802
使用java8 stream groupingBy操作,按城市分组list并通过join操作连接分组list的对象的name 属性使用逗号分隔。* 使用java8 stream groupingBy操作,按城市分组list并通过join操作连接分组list的对象的name 属性使用逗号分隔。* 使用java8 stream groupingBy操作,按城市分组list,将List转化为name的List。* 使用java8 stream groupingBy操作,按城市分组list统计count。
Collectors.groupingBy方法的使用
m0_59176231的博客
11-13 5405
业务场景:现在有5个人,这些人都年龄分部在18-30岁之间。现要求把他们按照年龄进行分组key:年龄value:数据列表输出结果如下:效果相当于是,把list这个集合里面存放的100个人每个人都调用Perple的getAge方法,按照getAge方法的返回进行分组。每个组是一个Map类型的对象。每个组,即Map,这个对象的键是getAge的返回,即,分组的依据。
java收集器分组函数 Collectors.groupingBy() 的用法详解
hkl_Forever的博客
01-01 3647
【2】推荐写法二,Collectors.toMap() 会使用 Function.identity() 或 o -> o 确定使用对象,BinaryOperator.minBy()或maxBy() 则用来规定比较属性,例如按分数、id等取最大或最小的那条数据。java的 stream 流是非常重要的特性,在开发是必备的技能,这里着重分析一下 Collectors.groupingBy() 的各种用法。1、代码示例,在第六步的基础上优化。【1】以上二种写法是等效的。
java8 : Collectors.groupingBy(分组)
strggle_bin的博客
11-13 2695
Collectors.groupingBy配合Stream流使用,可以对集合一个或多个属性进行分组,分组后还可以做聚合运算。
集合分组:Collectors.groupingBy()
GQ_666的博客
07-09 1万+
数据库有groupby 分组,Java里面其实也有的,感觉很好用。一行代码解决问题,太爽了 话不多说,上代码。 people实体:按照人员的地址分组,使用map<key,List<people>>接收。 public class People { private Integer id; private String name; private String address; private Integer age; public I
### java8之collector详解,以及结合toMap,sorted,groupingBy使用例子
zzhongcy的专栏
08-05 6771
最近接触到java8的collector功能,网上查了下资料学习,这里记录一下。 collect方法,它是一个能够把stream管道的结果集装进一个List集合的终极操作。 collect是一个把stream规约成一个value的规约操作,这里的value可以是一个Collection、Map或者一个value对象。在下面这几种情况下,可以使用collect操作。 把stream...
Stream之Collectors.groupingBy(分组)的使用
TayGo
10-14 3万+
Stream之Collectors.groupingBy(分组)的使用 参考自:https://blog.csdn.net/u014231523/article/details/102535902 Collectors.groupingBy配合Stream流使用,可以对集合一个或多个属性进行分组,分组后还可以做聚合运算。 首先把数据放入集合: Product prod1 = new Product(1L, 1, new BigDecimal("15.5"), "面包", "零食"); Produ
Java集合框架详解:List, Set, Map接口解析
本文将深入探讨Java集合知识,特别是标题和描述提到的List、ArrayList、Vector、Map和Set。 1. Collection接口 Collection是最基础的集合接口,它定义了存储对象的基本操作。所有的集合类都直接或间接地继承自...
写文章

热门文章

  • 深度学习之---yolov1,v2,v3详解 16959
  • PHPExcel 大数据的导出 14734
  • Vue Component 标签 12847
  • 计算机下的BT渗透 12304
  • 入侵139端口实例 9193

分类专栏

  • 我所理解的计算机基础 付费 15篇
  • 软件推荐 9篇
  • 前端 87篇
  • Java 167篇
  • PHP 129篇
  • Python 28篇
  • Golang 24篇
  • 服务器 45篇
  • Sql技术 10篇
  • 人生感悟 10篇

最新评论

  • springboot 集成 i18n实现国际化信息返回 实现中英文切换 实现网站支持多语言切换

    Json____: 拦截器里的代码 只是例子 并不是完整代码 只是写一下 怎么取数据

  • springboot 集成 i18n实现国际化信息返回 实现中英文切换 实现网站支持多语言切换

    weixin_43861356: 没有人发现他拦截器里面boolean不返回的嘛

  • 扫码挪车是怎么实现的呢?一篇文章带你了解一下!扫码挪车小程序基础版上线了!!!

    Json____: 对这个系统如果有兴趣的兄弟们可以参考这篇博客:https://blog.csdn.net/Drug_/article/details/142446183

  • linux系统使用 docker 来部署运行 mysql8 并配置 docker-compose-mysql.yml 文件

    普通网友: 写的很详细,感谢博主的分享。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • linux系统使用 docker 来部署运行 mysql5.7 并配置 docker-compose-mysql.yml 文件

    普通网友: 好文,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

大家在看

  • C++——继承 1721
  • 【SpringBoot】一张图看懂初始化阶段-ApplicationContext 378
  • SSD |(九)ECC原理 | LDPC 846
  • 服务器的介绍 692
  • Vue学习笔记(一)

最新文章

  • 网页复制粘贴助手,Chrome网页复制插件(谷歌浏览器复制插件)
  • 分享两种安装windows系统教程,学会后再也不需要花钱装系统了。
  • 扫码挪车网址收藏
2024
10月 2篇
09月 16篇
08月 12篇
07月 1篇
06月 4篇
05月 5篇
04月 10篇
03月 4篇
02月 1篇
2023年29篇
2022年70篇
2021年65篇
2020年34篇
2019年53篇
2018年103篇
2017年139篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Json____

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢鹿雕塑哪家值得信赖怒江玻璃钢花盆广东常用商场美陈研发公司十二生肖玻璃钢雕塑生产厂家实用的玻璃钢动物雕塑玻璃钢彩绘雕塑价格玻璃钢雕塑北极熊商场美陈装饰设计哪家好宣城水果玻璃钢雕塑运城景观标识玻璃钢景观雕塑公司天津玻璃钢雕塑加工厂家南昌户外玻璃钢雕塑造型安顺商场美陈展览玻璃钢雕塑供应定制福建玻璃钢雕塑厂招聘信息商场dp美陈景点定做内蒙古玻璃钢卡通雕塑雕塑一般用玻璃钢佛山主题玻璃钢雕塑摆件玻璃钢雕塑是商标的哪个类目新余玻璃钢雕塑报价宁德保山玻璃钢花盆价格商场美陈道具树尺寸造型苹果玻璃钢卡通雕塑厂厦门玻璃钢卡通雕塑手工制作广东景区玻璃钢雕塑市场石家庄卡通玻璃钢雕塑厂家绍兴玻璃钢雕塑批发通辽仿铜玻璃钢雕塑定做河源玻璃钢透光雕塑工艺香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化