java ArrayList按照同一屬性進(jìn)行分組
java ArrayList按照同一屬性進(jìn)行分組
前言:
通常使用SQL查詢一批數(shù)據(jù)的時(shí)候,可以利用SQL中的GROUP BY語句對(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)行分頁實(shí)例代碼
- 你真的理解Java中的ArrayList嗎
相關(guān)文章
Java實(shí)現(xiàn)解壓zip和rar包的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)解壓zip和rar包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01HttpServletResponse亂碼問題_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了HttpServletResponse亂碼問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07SpringBoot獲取maven打包時(shí)間的兩種方式
這篇文章主要介紹了SpringBoot獲取maven打包時(shí)間的兩種方式,文章通過代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05springboot整合mybatis-plus代碼生成器的配置解析
這篇文章主要介紹了springboot整合mybatis-plus代碼生成器的配置解析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02淺談Java隨機(jī)數(shù)的原理、偽隨機(jī)和優(yōu)化
這篇文章主要介紹了淺談Java隨機(jī)數(shù)的原理、偽隨機(jī)和優(yōu)化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01深入理解java中的synchronized關(guān)鍵字
這篇文章主要介紹了java中的synchronized關(guān)鍵字,有需要的朋友可以參考一下2013-12-12