java ArrayList按照同一屬性進(jìn)行分組
java ArrayList按照同一屬性進(jìn)行分組
前言:
通常使用SQL查詢一批數(shù)據(jù)的時(shí)候,可以利用SQL中的GROUP BY語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行分組,但是有時(shí)候出于對(duì)性能的考慮,不會(huì)使用GROUP BY,而是先把數(shù)據(jù)撈出來后,使用代碼,在內(nèi)存中按照某個(gè)屬性進(jìn)行分組。
代碼
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 + "]";
}
}
假設(shè)從數(shù)據(jù)查詢出一批數(shù)據(jù),存在了List<SkuVo> 里面了。使用一個(gè)算法按照skuId對(duì)List<SkuVo>進(jìn)行分組,skuId相同的歸為一組.
分組算法
public class TestArrayListGroupByKey {
public static void main(String[] args) {
/*1、準(zhǔn)備數(shù)據(jù)**/
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());
/*如果取不到數(shù)據(jù),那么直接new一個(gè)空的ArrayList**/
if (tempList == null) {
tempList = new ArrayList<>();
tempList.add(skuVo);
skuIdMap.put(skuVo.getSkuId(), tempList);
}
else {
/*某個(gè)sku之前已經(jīng)存放過了,則直接追加數(shù)據(jù)到原來的List里**/
tempList.add(skuVo);
}
}
/*3、遍歷map,驗(yàn)證結(jié)果**/
for(Long skuId : skuIdMap.keySet()){
System.out.println(skuIdMap.get(skuId));
}
}
}
結(jié)果如下
[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]]
從輸出結(jié)果看,數(shù)據(jù)已經(jīng)按照skuId進(jìn)行分組了。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- JAVA ArrayList詳細(xì)介紹(示例)
- Java中ArrayList類的使用方法
- java的arraylist排序示例(arraylist用法)
- Java ArrayList 數(shù)組之間相互轉(zhuǎn)換
- Java中ArrayList的removeAll方法詳解
- java ArrayList集合中的某個(gè)對(duì)象屬性進(jìn)行排序的實(shí)現(xiàn)代碼
- Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法
- Java中Arraylist動(dòng)態(tài)擴(kuò)容方法詳解
- java 對(duì)ArrayList進(jìn)行分頁(yè)實(shí)例代碼
- 你真的理解Java中的ArrayList嗎
相關(guān)文章
SpringBoot請(qǐng)求處理之常用參數(shù)注解介紹與源碼分析
mybatis?log4j2打印sql+日志實(shí)例代碼
mybatis 一對(duì)多嵌套查詢的實(shí)現(xiàn)
ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn)

