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> 里面了。使用一个算法按照skuid对list<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进行分组了。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!