java ArrayList按照同一屬性進行分組
更新時間:2017年02月17日 14:34:18 投稿:lqh
這篇文章主要介紹了java ArrayList按照同一屬性進行分組的相關資料,需要的朋友可以參考下
java ArrayList按照同一屬性進行分組
前言:
通常使用SQL查詢一批數(shù)據(jù)的時候,可以利用SQL中的GROUP BY語句對數(shù)據(jù)進行分組,但是有時候出于對性能的考慮,不會使用GROUP BY,而是先把數(shù)據(jù)撈出來后,使用代碼,在內存中按照某個屬性進行分組。
代碼
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ù)據(jù)查詢出一批數(shù)據(jù),存在了List<SkuVo> 里面了。使用一個算法按照skuId對List<SkuVo>進行分組,skuId相同的歸為一組.
分組算法
public class TestArrayListGroupByKey {
public static void main(String[] args) {
/*1、準備數(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一個空的ArrayList**/
if (tempList == null) {
tempList = new ArrayList<>();
tempList.add(skuVo);
skuIdMap.put(skuVo.getSkuId(), tempList);
}
else {
/*某個sku之前已經存放過了,則直接追加數(shù)據(jù)到原來的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]]
從輸出結果看,數(shù)據(jù)已經按照skuId進行分組了。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
SpringBoot請求處理之常用參數(shù)注解介紹與源碼分析
SpringBoot是一種整合Spring技術棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學習請求處理、常用注解和方法參數(shù)的小技巧2022-10-10

