JDK 1.8 Stream Collectors groupingBy 例子[通俗易懂]

JDK 1.8 Stream Collectors groupingBy 例子[通俗易懂]在这篇文章中,我们将向您展示如何使用java8 Stream Collectors 对列表分组,计数,求和和排序。1.GroupBy,CountandSort1.1Groupbya List anddisplaythetotalcountofit.(按列表分组,并显示其总数)Java8Example1.javapackagecom.mkyong.java8;i…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在这篇文章中,我们将向您展示如何使用java 8  Stream Collectors 对列表分组,计数,求和和排序。

1. Group By, Count and Sort

1.1 Group by a List and display the total count of it.(按列表分组,并显示其总数)

Java8Example1.java
package com.mkyong.java8; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class Java8Example1 { 
     public static void main(String[] args) { 
     //3 apple, 2 banana, others 1 List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya"); Map<String, Long> result = items.stream().collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ) ); System.out.println(result); } }

output

{
	papaya=1, orange=1, banana=2, apple=3
}

1.2 Add sorting.(增加排序实现)

Java8Example2.java
package com.mkyong.java8; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class Java8Example2 { 
     public static void main(String[] args) { 
     //3 apple, 2 banana, others 1 List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya"); Map<String, Long> result = items.stream().collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ) ); Map<String, Long> finalMap = new LinkedHashMap<>(); //Sort a map and add to finalMap result.entrySet().stream() .sorted(Map.Entry.<String, Long>comparingByValue() .reversed()).forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue())); System.out.println(finalMap); } }

output

{
	apple=3, banana=2, papaya=1, orange=1
}


2. List Objects

Examples to ‘group by’ a list of user defined Objects.(通过“用户定义的对象”列表进行分组的示例。)

2.1 A Pojo.

Item.java
package com.mkyong.java8; import java.math.BigDecimal; public class Item { 
     private String name; private int qty; private BigDecimal price; //constructors, getter/setters }

2.2 Group by the name + Count or Sum the Qty. (name + Count分组或者 对 Qty求和分组)

Java8Examples3.java
package com.mkyong.java8; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Java8Examples3 { 
     public static void main(String[] args) { 
     //3 apple, 2 banana, others 1 List<Item> items = Arrays.asList( new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 20, new BigDecimal("19.99")), new Item("orang", 10, new BigDecimal("29.99")), new Item("watermelon", 10, new BigDecimal("29.99")), new Item("papaya", 20, new BigDecimal("9.99")), new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 10, new BigDecimal("19.99")), new Item("apple", 20, new BigDecimal("9.99")) ); Map<String, Long> counting = items.stream().collect( Collectors.groupingBy(Item::getName, Collectors.counting())); System.out.println(counting); Map<String, Integer> sum = items.stream().collect( Collectors.groupingBy(Item::getName, Collectors.summingInt(Item::getQty))); System.out.println(sum); } }

output

//Group by + Count
{
	papaya=1, banana=2, apple=3, orang=1, watermelon=1
}

//Group by + Sum qty
{
	papaya=20, banana=30, apple=40, orang=10, watermelon=10
}

2.2  Price 分组 – Collectors.groupingBy and Collectors.mapping例子.

Java8Examples4.java
package com.mkyong.java8; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; public class Java8Examples4 { 
     public static void main(String[] args) { 
     //3 apple, 2 banana, others 1 List<Item> items = Arrays.asList( new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 20, new BigDecimal("19.99")), new Item("orang", 10, new BigDecimal("29.99")), new Item("watermelon", 10, new BigDecimal("29.99")), new Item("papaya", 20, new BigDecimal("9.99")), new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 10, new BigDecimal("19.99")), new Item("apple", 20, new BigDecimal("9.99")) ); //group by price Map<BigDecimal, List<Item>> groupByPriceMap = items.stream().collect(Collectors.groupingBy(Item::getPrice)); System.out.println(groupByPriceMap); // group by price, uses 'mapping' to convert List<Item> to Set<String> Map<BigDecimal, Set<String>> result = items.stream().collect( Collectors.groupingBy(Item::getPrice, Collectors.mapping(Item::getName, Collectors.toSet()) ) ); System.out.println(result); } }

output

{
	19.99=[
			Item{name='banana', qty=20, price=19.99}, 
			Item{name='banana', qty=10, price=19.99}
		], 
	29.99=[
			Item{name='orang', qty=10, price=29.99}, 
			Item{name='watermelon', qty=10, price=29.99}
		], 
	9.99=[
			Item{name='apple', qty=10, price=9.99}, 
			Item{name='papaya', qty=20, price=9.99}, 
			Item{name='apple', qty=10, price=9.99}, 
			Item{name='apple', qty=20, price=9.99}
		]
}

//group by + mapping to Set
{
	19.99=[banana], 
	29.99=[orang, watermelon], 
	9.99=[papaya, apple]
}




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171364.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据项目实训教学解决方案

    大数据项目实训教学解决方案大数据项目实训教学解决方案【课程资源】大数据项目实训和课程设计课程体系中职、高职还有本科,实训教学最关键的要素都是课程资源。唯众以大数据基础课程、核心技术课程为基础,以大数据产业实际应用案例为原型,遵照院校实训教学规范,开发了一系列的项目实训、课程设计课程资源,基本满足各院校大数据实训教学需求。【软件系统】大数据教学云平台大数据教学云平台是一个开放式的课程平台,除了唯众的课程体系之外,老师可自主开发在线课程,支持Word、PPT、PDF、视频等常见课件直接转换成在线课程,从而让老师很方便的将专业基

    2022年5月11日
  • 用CA给证书签名「建议收藏」

    用CA给证书签名「建议收藏」本文原创自http://blog.csdn.net/voipmaker 转载注明出处。本系列文章分为三篇,主要介绍构建自己的证书颁发服务,生成证书请求,以及通过自己构建的CA给生成的证书请求签名并最终应用到服务。本文是最后一篇,结合前面的两篇文章,可以通过自己构建的CA给自己的应用签名。本文假设你已经参照签名两篇文章流程,CA key在目录 /home/cg/myc

    2022年6月3日
  • java 正则表达式语法_JAVA正则表达式语法大全

    java 正则表达式语法_JAVA正则表达式语法大全元字符描述\将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline…

    2022年7月19日
  • 管理系统源码下载_资产管理系统源码

    管理系统源码下载_资产管理系统源码spring源码mybatis源码hibernate源码struts源码下载spring源码下载地址:http://www.maixiaogang.commybatis源码下载地址:https://github.com/mybatis/mybatis-3/releaseshibernate源码下载地址:http://hibernate.org/orm/downloads/strut…

    2022年9月23日
  • 数据库mysql的执行顺序(sql语句大全实例教程)

    今天遇到一个问题就是mysql中insertinto和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序:sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。一、sql执行顺序(1)from(3)join(2)on(4)where…

    2022年4月13日
  • PyQt5 打包 没有icon图标

    PyQt5 打包 没有icon图标

    2021年11月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号