JAVA JDK8 List分组的实现和用法
作者:Sam哥哥 发布时间:2023-11-26 09:56:11
标签:java,jdk,list
概述
对List
进行分组是日常开发中,经常遇到的,在JDK 8
中对List
按照某个属性分组的代码,超级简单。
package test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ListGroupTest {
public static void main(String[] args) {
List<Coupon> couponList = new ArrayList<>();
Coupon coupon1 = new Coupon(1,100,"优惠券1");
Coupon coupon2 = new Coupon(2,200,"优惠券2");
Coupon coupon3 = new Coupon(3,300,"优惠券3");
Coupon coupon4 = new Coupon(3,400,"优惠券4");
couponList.add(coupon1);
couponList.add(coupon2);
couponList.add(coupon3);
couponList.add(coupon4);
Map<Integer, List<Coupon>> resultList = couponList.stream().collect(Collectors.groupingBy(Coupon::getCouponId));
System.out.println(JSON.toJSONString(resultList, SerializerFeature.PrettyFormat));
}
}
package test;
public class Coupon {
private Integer couponId;
private Integer price;
private String name;
public Coupon(Integer couponId, Integer price, String name) {
this.couponId = couponId;
this.price = price;
this.name = name;
}
public Integer getCouponId() {
return couponId;
}
public void setCouponId(Integer couponId) {
this.couponId = couponId;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
上面的例子是对List
按照couponId
分组,couponId
一样的,归为一组。打印结果如下:
{
1:[
{
"couponId":1,
"name":"优惠券1",
"price":100
}
],
2:[
{
"couponId":2,
"name":"优惠券2",
"price":200
}
],
3:[
{
"couponId":3,
"name":"优惠券3",
"price":300
},
{
"couponId":3,
"name":"优惠券4",
"price":400
}
]
}
如果分组后,分组内并不想是对象,而是对象的属性,也可以做到的。
package test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ListGroupTest2 {
public static void main(String[] args) {
List<Coupon> couponList = new ArrayList<>();
Coupon coupon1 = new Coupon(1,100,"优惠券1");
Coupon coupon2 = new Coupon(2,200,"优惠券2");
Coupon coupon3 = new Coupon(3,300,"优惠券3");
Coupon coupon4 = new Coupon(3,400,"优惠券4");
couponList.add(coupon1);
couponList.add(coupon2);
couponList.add(coupon3);
couponList.add(coupon4);
Map<Integer, List<String>> resultList = couponList.stream().collect(Collectors.groupingBy(Coupon::getCouponId,Collectors.mapping(Coupon::getName,Collectors.toList())));
System.out.println(JSON.toJSONString(resultList, SerializerFeature.PrettyFormat));
}
}
这样分组内就是name
属性了。打印结果如下:
{
1:[
"优惠券1"
],
2:[
"优惠券2"
],
3:[
"优惠券3",
"优惠券4"
]
}
来源:https://blog.csdn.net/linsongbin1/article/details/83933703
0
投稿
猜你喜欢
- 树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常
- Java接口回调产生接口回调的场景在现实生活中,产生接口回调的场景很简单,比如我主动叫你帮我做一件事,然后你做完这件事之后会通知我,&quo
- 一、概述我们对于这个图片肯定会非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构。在数据结构中我们了解到可以
- 个人理解:把一个类里的多个命令分离出来,每个类里放一个命令,实现解耦合,一个类只对应一个功能,在使用命令时由另一个类来统一管理所有命令。缺点
- 本文实例汇总了Java文件操作。分享给大家供大家参考,具体如下:1.创建文件夹//import java.io.*; File myFold
- try { // 方
- 使用自定义注解实现接口限流在高并发系统中,保护系统的三种方式分别为:缓存,降级和限流。限流的目的是通过对并发访问请求进行限速或者一个时间窗口
- 一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如第6页用6表示而不是06或0
- 目录1. List1.1 List 的常见方法1.2 代码示例2. ArrayList2.1 介绍2.2 ArrayList 的构造方法2.
- 本文实例讲述了Java日期操作方法工具类。分享给大家供大家参考,具体如下:package com.gcloud.common;import
- JAVA 中Spring的@Async用法总结引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方
- SSH(Secure Shell)是一套协议标准,可以用来实现两台机器之间的安全登录以及安全的数据传送,其保证数据安全的原理是非对称加密。传
- 什么是OKHttp一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进
- 先说一下对异步和同步的理解:同步调用:调用方在调用过程中,持续等待返回结果。异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任
- 本文实例为大家分享了Android仿新浪微博分页管理界面的具体代码,供大家参考,具体内容如下多个activity分页管理,为了方便获取上下文
- 静态库和动态库的区别1、静态库的扩展名一般为".a"或者".lib";动态库的扩展名一般为"
- spinner组件有点类型于HTML中的下拉框<Select></select>的样子,让用户每次从下拉框中选取一个
- 1. IOC和DI首先,我们应该明确,IOC是一种思想,并不是Spring特有的,而是软件工程逐步发展的一种产物,是一种优秀的编程思想,之所
- Environment的中文意思是环境,它表示整个spring应用运行时的环境信息,它包含两个关键因素profilespropertiesp
- 前言由于现在网络层已经升级到RxJava2.x相关的了,所以需要做些调整。虽然RxJava1.x和RxJava2.x同属RxJava系列,但