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进行分组了。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
