`

对ArrayList按照某个属性进行分组

 
阅读更多

 

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

 

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());
            /*如果取不到数据,那么直接new一个空的ArrayList**/
            if (tempList == null) {
                tempList = new ArrayList<>();
                tempList.add(skuVo);
                skuIdMap.put(skuVo.getSkuId(), tempList);
            }
            else {
                /*某个sku之前已经存放过了,则直接追加数据到原来的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]]

 

 本文参考:https://blog.csdn.net/linsongbin1/article/details/54341078

 

分享到:
评论

相关推荐

    根据某个属性对List中的所有对象分组,该属性值相同的对象分到一个组

    在给定的场景中,问题是如何根据对象的一个属性值对List中的对象进行分组,以便每个组包含具有相同属性值的对象。这是一个典型的数据处理任务,可以利用Java 8引入的流(Stream)和收集器(Collector)来高效地完成。 ...

    Android-仿微信通讯录的实现联系人按字母分组显示右侧添加快速索引条

    联系人数据可以存储在一个`ArrayList&lt;Contact&gt;`中,其中`Contact`类包含姓名、电话等属性。我们可以使用Java的`Collections.sort()`方法对这个列表进行排序,根据联系人的姓氏首字母进行升序排列。为了实现按字母...

    java8从list集合中取出某一属性的值的集合案例

    在日常开发过程中,我们经常需要对List集合进行取值筛选。下面是一些常用的知识点: * 遍历-foreach循环 * 筛选-filter方法 * 排序-sort方法 * 分组-groupBy方法 例如,我们可以使用流式编程从List集合中取出所有...

    Android ListView城市列表,按a-z分组字母索引排序

    本篇将详细介绍如何实现Android ListView的城市列表,并按照A至Z的字母顺序进行分组和排序。 首先,我们需要准备数据源。城市列表可以存储为一个ArrayList,其中每个元素是包含城市名的自定义对象,例如`City`类。`...

    JOSQL((SQL for Java Objects))

    例如,你可以定义一个查询来选取满足特定条件的对象,或者根据某个属性对对象集合进行排序和分组。 1. **查询构造**:JoSQL允许你在Java代码中构建SQL查询字符串,然后将其应用于Java集合。这种方式不仅简洁,而且...

    JoSQL (SQL for Java Objects)-开源

    你可以根据对象的某个属性进行分组,然后对每个组进行聚合计算,如计数、求和等。 5. 聚合函数:JoSQL还支持SQL中的聚合函数,如COUNT、SUM、AVG、MIN和MAX,可以在对象集合上进行统计计算。 6. 开源特性:作为...

    决策树java代码实现.docx

    4. **groupByFeature**: 将数据集按照某个特征进行分组。 以上介绍了一个简化版的决策树分类器的Java实现框架。这种实现方式虽然简单,但对于理解决策树的工作原理非常有帮助。需要注意的是,实际应用中应考虑更多...

    实现ListView的A-Z字母排序

    1. 数据准备:确保你的数据源(如ArrayList)中的对象包含一个可以用来排序的属性,例如字符串形式的名字。你需要对这些名字进行拼音转换,因为中文字符需要转换成对应的拼音才能进行字母排序。Android系统并没有...

    C#全能速查宝典

    《C#全能速查宝典》所讲的知识点按照功能和字母进行排序,读者既可以按照功能顺序查找,又可以按照字母顺序学习。 《C#全能速查宝典》不仅适合C#程序设计初学者,也可作为中、高级程序开发人员的参考手册。 ========...

    2021-2022计算机二级等级考试试题及答案No.13214.docx

    选项A正确地使用了GROUP BY对学号进行分组,并使用HAVING对满足特定条件(成绩在90分以上的课程数超过3门)的记录进行筛选。其他选项中,WHERE子句无法对分组后的数据进行筛选,GROUP BY和HAVING的位置及用法有误。...

    Android应用源码之Android字母排序 类似通讯录字母检索.zip

    为了实现字母排序,需要对这个数据集进行预处理,将姓名按首字母分组,并创建一个表示字母索引的列表。 接下来,我们会有个侧面滑出的字母条,通常是一个侧滑菜单或者叫做抽屉布局(DrawerLayout)。当用户点击某个...

    displaytag的详细使用说明

    4. **列分组**:使用 `&lt;display:group&gt;` 标签,可以将相关的列进行分组,以方便组织和展示数据。 5. **条件渲染**:通过 `decorator` 属性,可以使用自定义的装饰器来决定某个单元格的内容如何显示。 6. **国际化*...

    android 快速滑动listview,快速滑动右边的一排字母,快速查找对应的信息,滑动同时还有方块显示滑动到哪个字母

    这涉及到对数据源进行排序和分组,然后根据字母索引找到对应的列表项的位置。可能需要自定义Comparator来实现这个逻辑。 7. **平滑滚动**:使用ListView的smoothScrollToPosition()方法,可以平滑地滚动到指定位置...

    仿QQ好友列表ListView

    在这个仿QQ好友列表中,数据被按照每个组进行分类。实现这一功能的关键在于使用`ExpandableListView`而非普通的`ListView`。`ExpandableListView`允许我们创建可展开/折叠的子列表,非常适合处理分组数据。每个组...

    Java函数式编程(十):收集器

    - groupingBy():按某个属性将元素分组到Map中,键是属性值,值是具有该属性的元素的列表。 - counting():计算Stream中元素的数量,返回LongSummaryStatistics或long值。 - reducing():对Stream元素应用一个累积...

    java方面的知识总结

    ### Java方面的知识总结 ... - **分组查询**:使用`GROUP BY`子句对查询结果进行分组。 以上内容涵盖了Java学习过程中的一些基础知识和技术要点,可以帮助读者更好地理解和掌握Java开发的相关技能。

    DROOLS语法详解.txt

    - **`agenda-group`**: 将规则分组,使得相同组内的规则可以一起处理,默认为`MAIN`。 - **`auto-focus`**: 控制规则是否自动聚焦到某个议程组,默认为`false`。 - **`activation-group`**: 用于控制规则的激活方式...

    ASP.NET2.0高级编程(第4版)1/6

     20.3.3 对SQL Server的影响695  20.3.4 查看支持SQL  高速缓存禁用功能的表696  20.3.5 使表不支持  SQL Server高速  缓存禁用功能697  20.3.6 使数据库不支持  SQL Server高速  缓存禁用功能697  20.3....

    ListViewPopupWindowDemo

    `ListViewPopupWindowDemo`是一个结合了这两者的自定义控件,它通过添加动画效果,使用户界面更具交互性和吸引力,可以说是对传统Spinner组件功能的一种增强。 首先,我们来详细解释一下`ListView`和`PopupWindow`...

Global site tag (gtag.js) - Google Analytics