java ArrayList按照同一屬性進(jìn)行分組
java ArrayList按照同一屬性進(jìn)行分組
前言:
通常使用SQL查詢一批數(shù)據(jù)的時候,可以利用SQL中的GROUP BY語句對數(shù)據(jù)進(jìn)行分組,但是有時候出于對性能的考慮,不會使用GROUP BY,而是先把數(shù)據(jù)撈出來后,使用代碼,在內(nèi)存中按照某個屬性進(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> 里面了。使用一個算法按照skuId對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一個空的ArrayList**/ if (tempList == null) { tempList = new ArrayList<>(); tempList.add(skuVo); skuIdMap.put(skuVo.getSkuId(), tempList); } else { /*某個sku之前已經(jīng)存放過了,則直接追加數(shù)據(jù)到原來的List里**/ tempList.add(skuVo); } } /*3、遍歷map,驗證結(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)行分組了。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
HttpServletResponse亂碼問題_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了HttpServletResponse亂碼問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07springboot整合mybatis-plus代碼生成器的配置解析
這篇文章主要介紹了springboot整合mybatis-plus代碼生成器的配置解析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02淺談Java隨機(jī)數(shù)的原理、偽隨機(jī)和優(yōu)化
這篇文章主要介紹了淺談Java隨機(jī)數(shù)的原理、偽隨機(jī)和優(yōu)化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01深入理解java中的synchronized關(guān)鍵字
這篇文章主要介紹了java中的synchronized關(guān)鍵字,有需要的朋友可以參考一下2013-12-12