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中的对象进行分组,以便每个组包含具有相同属性值的对象。这是一个典型的数据处理任务,可以利用Java 8引入的流(Stream)和收集器(Collector)来高效地完成。 ...
联系人数据可以存储在一个`ArrayList<Contact>`中,其中`Contact`类包含姓名、电话等属性。我们可以使用Java的`Collections.sort()`方法对这个列表进行排序,根据联系人的姓氏首字母进行升序排列。为了实现按字母...
在日常开发过程中,我们经常需要对List集合进行取值筛选。下面是一些常用的知识点: * 遍历-foreach循环 * 筛选-filter方法 * 排序-sort方法 * 分组-groupBy方法 例如,我们可以使用流式编程从List集合中取出所有...
本篇将详细介绍如何实现Android ListView的城市列表,并按照A至Z的字母顺序进行分组和排序。 首先,我们需要准备数据源。城市列表可以存储为一个ArrayList,其中每个元素是包含城市名的自定义对象,例如`City`类。`...
例如,你可以定义一个查询来选取满足特定条件的对象,或者根据某个属性对对象集合进行排序和分组。 1. **查询构造**:JoSQL允许你在Java代码中构建SQL查询字符串,然后将其应用于Java集合。这种方式不仅简洁,而且...
你可以根据对象的某个属性进行分组,然后对每个组进行聚合计算,如计数、求和等。 5. 聚合函数:JoSQL还支持SQL中的聚合函数,如COUNT、SUM、AVG、MIN和MAX,可以在对象集合上进行统计计算。 6. 开源特性:作为...
4. **groupByFeature**: 将数据集按照某个特征进行分组。 以上介绍了一个简化版的决策树分类器的Java实现框架。这种实现方式虽然简单,但对于理解决策树的工作原理非常有帮助。需要注意的是,实际应用中应考虑更多...
1. 数据准备:确保你的数据源(如ArrayList)中的对象包含一个可以用来排序的属性,例如字符串形式的名字。你需要对这些名字进行拼音转换,因为中文字符需要转换成对应的拼音才能进行字母排序。Android系统并没有...
《C#全能速查宝典》所讲的知识点按照功能和字母进行排序,读者既可以按照功能顺序查找,又可以按照字母顺序学习。 《C#全能速查宝典》不仅适合C#程序设计初学者,也可作为中、高级程序开发人员的参考手册。 ========...
选项A正确地使用了GROUP BY对学号进行分组,并使用HAVING对满足特定条件(成绩在90分以上的课程数超过3门)的记录进行筛选。其他选项中,WHERE子句无法对分组后的数据进行筛选,GROUP BY和HAVING的位置及用法有误。...
为了实现字母排序,需要对这个数据集进行预处理,将姓名按首字母分组,并创建一个表示字母索引的列表。 接下来,我们会有个侧面滑出的字母条,通常是一个侧滑菜单或者叫做抽屉布局(DrawerLayout)。当用户点击某个...
4. **列分组**:使用 `<display:group>` 标签,可以将相关的列进行分组,以方便组织和展示数据。 5. **条件渲染**:通过 `decorator` 属性,可以使用自定义的装饰器来决定某个单元格的内容如何显示。 6. **国际化*...
这涉及到对数据源进行排序和分组,然后根据字母索引找到对应的列表项的位置。可能需要自定义Comparator来实现这个逻辑。 7. **平滑滚动**:使用ListView的smoothScrollToPosition()方法,可以平滑地滚动到指定位置...
在这个仿QQ好友列表中,数据被按照每个组进行分类。实现这一功能的关键在于使用`ExpandableListView`而非普通的`ListView`。`ExpandableListView`允许我们创建可展开/折叠的子列表,非常适合处理分组数据。每个组...
- groupingBy():按某个属性将元素分组到Map中,键是属性值,值是具有该属性的元素的列表。 - counting():计算Stream中元素的数量,返回LongSummaryStatistics或long值。 - reducing():对Stream元素应用一个累积...
### Java方面的知识总结 ... - **分组查询**:使用`GROUP BY`子句对查询结果进行分组。 以上内容涵盖了Java学习过程中的一些基础知识和技术要点,可以帮助读者更好地理解和掌握Java开发的相关技能。
- **`agenda-group`**: 将规则分组,使得相同组内的规则可以一起处理,默认为`MAIN`。 - **`auto-focus`**: 控制规则是否自动聚焦到某个议程组,默认为`false`。 - **`activation-group`**: 用于控制规则的激活方式...
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`是一个结合了这两者的自定义控件,它通过添加动画效果,使用户界面更具交互性和吸引力,可以说是对传统Spinner组件功能的一种增强。 首先,我们来详细解释一下`ListView`和`PopupWindow`...