当前位置: 移动技术网 > IT编程>开发语言>Java > java ArrayList按照同一属性进行分组

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网