English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تجميع ArrayList في جافا بناءً على خاصية واحدة

تجميع ArrayList في جافا بناءً على خاصية واحدة

المقدمة:

عند استخدامه SQL لاستعلام مجموعة من البيانات، يمكن استخدام جملة GROUP BY في SQL لتجميع البيانات، ولكن بعض الأحيان من أجل النظر في الأداء، لن يستخدم GROUP BY، بل يجمع البيانات أولاً ثم يستخدم الكود، في ذاكرة التخزين لتجميع البيانات بناءً على خصائص معينة.

كود

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 + "]";
  }
}

افترض أن يتم استخراج مجموعة من البيانات من الاستعلامات، وتكون موجودة في List<SkuVo>. باستخدام خوارزمية، قم بتقسيم List<SkuVo> بناءً على skuId، حيث يتم تجميع الأنواع التي لها نفس skuId في مجموعة واحدة.

الخوارزمية المجمعة

public class TestArrayListGroupByKey {
  public static void main(String[] args) {
    /*1、إعداد البيانات**/
    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());
      /*إذا لم يتم الحصول على البيانات، يتم إنشاء ArrayList فارغة مباشرة**/}
      if (tempList == null) {
        tempList = new ArrayList<>();
        tempList.add(skuVo);
        skuIdMap.put(skuVo.getSkuId(), tempList);
      }
      else {
        /*إذا تم تخزين sku معين من قبل، فإنه يتم إضافة البيانات مباشرة إلى القائمة الحالية**/
        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]]

من خلال النظر في النتائج، تم تجميع البيانات بالفعل بناءً على skuId.

شكرًا على القراءة، آمل أن تكون مفيدًا للجميع، شكرًا لدعمكم لموقعنا!

أنت قد تحب