English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
java ArrayList按照同一属性进行分组
Préambule :
En général, lors de la recherche d'un ensemble de données à l'aide d'une requête SQL, on peut utiliser la clause GROUP BY de SQL pour regrouper les données, mais parfois, pour des raisons de performance, on ne utilise pas GROUP BY, mais récupère d'abord les données, puis utilise le code pour regrouper les données en mémoire selon une certaine propriété.
code
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 + "]"; } }
hypothétiquement, après la recherche de données, une série de données existe dans List<SkuVo>. Utiliser un algorithme pour regrouper List<SkuVo> selon skuId, les éléments avec le même skuId sont regroupés dans un même groupe.
algorithme de grouping
public class TestArrayListGroupByKey { public static void main(String[] args) {}} /*1、Préparation des données**/ 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、Algorithme de grouping**/ Map<Long, List<SkuVo>> skuIdMap = new HashMap<>(); for (SkuVo skuVo : skuVoList) { List<SkuVo> tempList = skuIdMap.get(skuVo.getSkuId()); /*Si les données ne peuvent pas être obtenues, créez directement une ArrayList vide**/ if (tempList == null) { tempList = new ArrayList<>(); tempList.add(skuVo); skuIdMap.put(skuVo.getSkuId(), tempList); } else { /*Si un certain sku a déjà été stocké, ajoutez directement les données à la liste originale**/ tempList.add(skuVo); } } /*3、Parcourir la map pour vérifier les résultats**/ for(Long skuId : skuIdMap.keySet()){ System.out.println(skuIdMap.get(skuId)); } } }
Résultat suivant
[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]]
D'après les résultats de la sortie, les données ont été regroupées selon skuId.
Merci de lire, j'espère que cela pourra aider tout le monde, merci de votre soutien à ce site !