java ArrayList按照同一属性进行分组

发布时间 - 2026-01-10 23:07:38    点击率:

java ArrayList按照同一属性进行分组

前言:

通常使用SQL查询一批数据的时候,可以利用SQL中的GROUP BY语句对数据进行分组,但是有时候出于对性能的考虑,不会使用GROUP BY,而是先把数据捞出来后,使用代码,在内存中按照某个属性进行分组。

代码

public class SkuVo {

  private Long skuId;
  private String productName;
  private Long brandStoreSn;

  public SkuVo(Long skuId, String productName, Long brandStoreSn) {
    super();
    this.skuId = skuId;
    this.productName = productName;
    this.brandStoreSn = brandStoreSn;
  }

  public Long getSkuId() {
    return skuId;
  }
  public void setSkuId(Long skuId) {
    this.skuId = skuId;
  }
  public String getProductName() {
    return productName;
  }
  public void setProductName(String productName) {
    this.productName = productName;
  }
  public Long getBrandStoreSn() {
    return brandStoreSn;
  }
  public void setBrandStoreSn(Long brandStoreSn) {
    this.brandStoreSn = brandStoreSn;
  }

  @Override
  public String toString() {
    return "SkuVo [skuId=" + skuId + ", productName=" + productName + ", brandStoreSn=" + brandStoreSn + "]";
  }
}

假设从数据查询出一批数据,存在了List<SkuVo> 里面了。使用一个算法按照skuIdList<SkuVo>进行分组,skuId相同的归为一组.

分组算法

public class TestArrayListGroupByKey {

  public static void main(String[] args) {
    /*1、准备数据**/
    SkuVo sku1 = new SkuVo(1L,"p1",100L);
    SkuVo sku2 = new SkuVo(2L,"p2",101L);
    SkuVo sku3 = new SkuVo(3L,"p3",102L);
    SkuVo sku4 = new SkuVo(3L,"p4",103L);
    SkuVo sku5 = new SkuVo(2L,"p5",100L);
    SkuVo sku6 = new SkuVo(5L,"p6",100L);

    List<SkuVo> skuVoList = Arrays.asList(new SkuVo [] {sku1,sku2,sku3,sku4,sku5,sku6});

    /*2、分组算法**/
    Map<Long, List<SkuVo>> skuIdMap = new HashMap<>();
    for (SkuVo skuVo : skuVoList) {
      List<SkuVo> tempList = skuIdMap.get(skuVo.getSkuId());
      /*如果取不到数据,那么直接new一个空的ArrayList**/
      if (tempList == null) {
        tempList = new ArrayList<>();
        tempList.add(skuVo);
        skuIdMap.put(skuVo.getSkuId(), tempList);
      }
      else {
        /*某个sku之前已经存放过了,则直接追加数据到原来的List里**/
        tempList.add(skuVo);
      }
    }

    /*3、遍历map,验证结果**/
    for(Long skuId : skuIdMap.keySet()){
      System.out.println(skuIdMap.get(skuId));
    }
  }
}

结果如下

[SkuVo [skuId=1, productName=p1, brandStoreSn=100]]
[SkuVo [skuId=2, productName=p2, brandStoreSn=101], SkuVo [skuId=2, productName=p5, brandStoreSn=100]]
[SkuVo [skuId=3, productName=p3, brandStoreSn=102], SkuVo [skuId=3, productName=p4, brandStoreSn=103]]
[SkuVo [skuId=5, productName=p6, brandStoreSn=100]]

从输出结果看,数据已经按照skuId进行分组了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # ArrayList按照同一属性进行分组  # ArrayList分组  # ArrayList属性分组  # JAVA ArrayList详细介绍(示例)  # Java中ArrayList类的使用方法  # java的arraylist排序示例(arraylist用法)  # Java ArrayList 数组之间相互转换  # Java中ArrayList的removeAll方法详解  # java ArrayList集合中的某个对象属性进行排序的实现代码  # Java针对ArrayList自定义排序的2种实现方法  # Java中Arraylist动态扩容方法详解  # java 对ArrayList进行分页实例代码  # 你真的理解Java中的ArrayList吗  # 过了  # 遍历  # 希望能  # 谢谢大家  # 先把  # 可以利用  # 捞出  # 数据查询  # setProductName  # setBrandStoreSn  # getBrandStoreSn  # setSkuId  # return  # void  # getSkuId  # getProductName  # color  # List  # ff  # toString 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 怎样使用JSON进行数据交换_它有什么限制  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  Laravel如何处理异常和错误?(Handler示例)  Linux后台任务运行方法_nohup与&使用技巧【技巧】  高性能网站服务器配置指南:安全稳定与高效建站核心方案  详解jQuery停止动画——stop()方法的使用  网站制作软件有哪些,制图软件有哪些?  C++时间戳转换成日期时间的步骤和示例代码  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  javascript中闭包概念与用法深入理解  如何在建站主机中优化服务器配置?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  活动邀请函制作网站有哪些,活动邀请函文案?  简单实现Android验证码  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Swift开发中switch语句值绑定模式  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel如何创建自定义Artisan命令?(代码示例)  如何在宝塔面板中创建新站点?  如何选择PHP开源工具快速搭建网站?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  香港服务器部署网站为何提示未备案?  微信小程序 scroll-view组件实现列表页实例代码  详解Android图表 MPAndroidChart折线图  如何快速搭建安全的FTP站点?  如何在Windows环境下新建FTP站点并设置权限?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  高性价比服务器租赁——企业级配置与24小时运维服务  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  如何用5美元大硬盘VPS安全高效搭建个人网站?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  如何在建站之星绑定自定义域名?  网易LOFTER官网链接 老福特网页版登录地址  微信推文制作网站有哪些,怎么做微信推文,急?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  EditPlus中的正则表达式 实战(2)  phpredis提高消息队列的实时性方法(推荐)  如何快速登录WAP自助建站平台?  详解阿里云nginx服务器多站点的配置