收藏家.groupby示例:如何在java中进行分组

让我们借助示例进一步了解:让我们如下创建模型类国家/地区:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
包 组织.Arpit.爪哇2blog; 上市 类 国家{ 串 国家的名字; 长 人口; 上市 国家() { 超(); } 上市 国家(串 国家的名字,长 人口) { 超(); 这个.国家的名字 = 国家的名字; 这个.人口=人口; } 上市 串 得到CountryName() { 返回 国家的名字; } 上市 虚空 setCountryName(串 国家的名字) { 这个.国家的名字 = 国家的名字; } 上市 长 得到Population() { 返回 人口; } 上市 虚空 setPopulation(长 人口) { 这个.人口 = 人口; } @覆写 上市 整型 hashCode() { 最后 整型 主要 = 31; 整型 结果 = 1; 结果 = 主要 * 结果 + ((国家的名字 == 空值) ? 0 : 国家的名字.hashCode()); 结果 = 主要 * 结果 + (整型) (人口 ^ (人口 >>> 32)); 返回 结果; } @覆写 上市 布尔值 等于(目的 对象) { 如果 (这个 == 对象) 返回 真正; 如果 (对象 == 空值) 返回 假; 如果 (得到Class() != 对象.得到Class()) 返回 假; 国家 其他 = (国家) 对象; 如果 (国家的名字 == 空值) { 如果 (其他.国家的名字 != 空值) 返回 假; } 其他 如果 (!国家的名字.等于(其他.国家的名字)) 返回 假; 如果 (人口 != 其他.人口) 返回 假; 返回 真正; } 上市 串 toString() { 返回 “ {”+国家的名字+“,”+人口+“}”; } } |
让我们创建主类,在其中我们将使用Collectors.groupBy进行分组依据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
包 组织.Arpit.爪哇2blog; 进口 爪哇.数学.大十进制; 进口 爪哇.实用程序.数组; 进口 爪哇.实用程序.清单; 进口 爪哇.实用程序.地图; 进口 爪哇.实用程序.流.收藏家; 上市 类 爪哇8CollectorsGroupBy { 上市 静态的 虚空 主要(串[] args) { 清单 项目 = 数组.asList(新 国家(“印度”, 20000), 新 国家(“中国”, 40000), 新 国家(“尼泊尔”, 30000), 新 国家(“印度”, 50000), 新 国家(“中国”, 10000)); //按国家/地区分组 地图<串, 清单> groupByCountry = 项目.流().收藏( 收藏家.分组(国家:: 得到CountryName)); 系统.出.打印(groupByCountry.得到(“印度”)); //按CountryName分组并计算计数 地图<串, 长> 数数 = 项目.流().收藏( 收藏家.分组(国家:: 得到CountryName,收藏家.数数())); //按国家/地区分组并汇总人口 系统.出.打印(数数); 地图<串, 长> 人口计数 = 项目.流().收藏( 收藏家.分组(国家:: 得到CountryName, 收藏家.总结长(国家:: 得到Population))); 系统.出.打印(人口计数); } } |
在上课时,您将获得以下输出:
{中国= 2,尼泊尔= 1,印度= 2}
{中国= 50000,尼泊尔= 30000,印度= 70000}
参考:
//docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html