java ArrayList按照同一属性进行分组
javaArrayList按照同一属性进行分组
前言:
通常使用SQL查询一批数据的时候,可以利用SQL中的GROUPBY语句对数据进行分组,但是有时候出于对性能的考虑,不会使用GROUPBY,而是先把数据捞出来后,使用代码,在内存中按照某个属性进行分组。
代码
publicclassSkuVo{ privateLongskuId; privateStringproductName; privateLongbrandStoreSn; publicSkuVo(LongskuId,StringproductName,LongbrandStoreSn){ super(); this.skuId=skuId; this.productName=productName; this.brandStoreSn=brandStoreSn; } publicLonggetSkuId(){ returnskuId; } publicvoidsetSkuId(LongskuId){ this.skuId=skuId; } publicStringgetProductName(){ returnproductName; } publicvoidsetProductName(StringproductName){ this.productName=productName; } publicLonggetBrandStoreSn(){ returnbrandStoreSn; } publicvoidsetBrandStoreSn(LongbrandStoreSn){ this.brandStoreSn=brandStoreSn; } @Override publicStringtoString(){ return"SkuVo[skuId="+skuId+",productName="+productName+",brandStoreSn="+brandStoreSn+"]"; } }
假设从数据查询出一批数据,存在了List<SkuVo>里面了。使用一个算法按照skuId对List<SkuVo>进行分组,skuId相同的归为一组.
分组算法
publicclassTestArrayListGroupByKey{ publicstaticvoidmain(String[]args){ /*1、准备数据**/ SkuVosku1=newSkuVo(1L,"p1",100L); SkuVosku2=newSkuVo(2L,"p2",101L); SkuVosku3=newSkuVo(3L,"p3",102L); SkuVosku4=newSkuVo(3L,"p4",103L); SkuVosku5=newSkuVo(2L,"p5",100L); SkuVosku6=newSkuVo(5L,"p6",100L); List<SkuVo>skuVoList=Arrays.asList(newSkuVo[]{sku1,sku2,sku3,sku4,sku5,sku6}); /*2、分组算法**/ Map<Long,List<SkuVo>>skuIdMap=newHashMap<>(); for(SkuVoskuVo:skuVoList){ List<SkuVo>tempList=skuIdMap.get(skuVo.getSkuId()); /*如果取不到数据,那么直接new一个空的ArrayList**/ if(tempList==null){ tempList=newArrayList<>(); tempList.add(skuVo); skuIdMap.put(skuVo.getSkuId(),tempList); } else{ /*某个sku之前已经存放过了,则直接追加数据到原来的List里**/ tempList.add(skuVo); } } /*3、遍历map,验证结果**/ for(LongskuId: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进行分组了。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!