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]
}




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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux查看端口占用情况的命令是什么_查看端口状态命令

    linux查看端口占用情况的命令是什么_查看端口状态命令Linux查看端口占用情况的命令

    2022年10月24日
  • java random.nextInt的坑

    java random.nextInt的坑下面的代码Randomrandom=newRandom();Integercode=random.nextInt(len);很简单的两句代码,需要注意两点:第一:nextInt的取值是[0,n),不包括n。如果是随机list,直接传list的size,不用担心下标越界。api说明:Returnsapseudorandom,uniformly

  • cacheable更新_详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用

    cacheable更新_详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用注释介绍@Cacheable@Cacheable的作用主要针对方法配置,能够根据方法的请求参数对其结果进行缓存@Cacheable作用和配置方法参数解释examplevalue缓存的名称,在spring配置文件中定义,必须指定至少一个例如:@Cacheable(value=”mycache”)@Cacheable(value={”cache1”,”cache2”}key缓存的key,可…

  • linux文本编辑的几种退出方法「建议收藏」

    linux文本编辑的几种退出方法「建议收藏」1.使用Vim的时候便捷方式:(1)ctrl+z退出,fg进入(2)正常模式下输入“:sh”进入linux环境,离开Linuxe环境进入Vim使用exit参考:https://blog.csdn.net/A632189007/article/details/78263459一般方式:输入“:wq”然后回车就退出了,表示先保存再退出按“:q”退出:在任何情况先按键盘上面…

  • 发布小工具:Ip一键切换V1.0「建议收藏」

    发布小工具:Ip一键切换V1.0「建议收藏」你还在手动修改Ip么?IP地址一键切换,你经历过么?Download一个试试吧。本工具用批处理实现,无需安装,绿色安全。

  • Pycharm中的terminal无法使用bash命令解决办法

    Pycharm中的terminal无法使用bash命令解决办法Reason:最近在看FADA论文,并且要运行代码。要运行的文件是sh文件,我想在terminal中使用bashxxx.sh来运行此文件,结果报错:‘bash’不是内部或外部命令,也不是可运行的程序或批处理文件。解决办法:(需要提前下好git,git网上教程很多,这里不赘述)打开Pycharm,File—->Settings—–>Tools—–>Terminal,如下图选择git安装目录下,bin文件中的bash.exe即可点击OK之后,去Terminal中看,

    2022年10月29日

发表回复

您的电子邮箱地址不会被公开。

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