欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-07 15:15:57
java arraylist按照同一属性进行分组 前言: 通常使用sql查询一批数据的时候,可以利用sql中的group by语句对数据进行分组,但是有时候出于对性能的...

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进行分组了。

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