Java 8 Stream Collectors groupingBy 示例

Java 8 Stream Collectors groupingBy 示例展示如何使用Java8Stream Collectors进行分组,计数,总和和排序List分组,计数和排序1.1分组List并显示其总数。Java8Example1.javapackagecom.mkyong.java8;importjava.util.Arrays;importjava.util.List;importjava.util.Map;

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

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

展示如何使用Java 8 Stream Collectors进行分组,计数,总和和排序List

分组,计数和排序

1.1分组List并显示其总数。

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

{
  
  
	番木瓜= 1,橙= 1,香蕉= 2,苹果= 3
}

1.2添加排序。

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

{
  
  
	苹果= 3,香蕉= 2,木瓜= 1,橙= 1
}

2.List Objects

“分组”用户定义的对象列表的示例。

2.1 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 按姓名+数字或数量组合。

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
{
  
  
	番木瓜= 1,香蕉= 2,苹果= 3,猩猩= 1,西瓜= 1
}

// Group by + Sum qty
{
  
  
	番木瓜= 20,香蕉= 30,苹果= 40,orang = 10,西瓜= 10
}

2.2按价格分组 – Collectors.groupingByCollectors.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 +映射到Set
{
  
  
	19.99 = [香蕉] 
	29.99 = [orang,西瓜], 
	9.99 = [番木瓜,苹果]
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • Jenkins学习——Jenkins是什么

    Jenkins学习——Jenkins是什么Jenkins是什么     对于Jenkins是什么,百度百科给的答案是这样的:Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。     通过这句话,我们可以得到这样的一个信息——Jenkins是一个开源的东东,好像跟持续集成开发有关系(然而我们并不知道持续集成开发是什么东东)。     通俗的说,就我目前的理解

    2022年5月5日
    45
  • pycharm快速删除一行快捷键:ctrl+x(剪切掉)「建议收藏」

    pycharm快速删除一行快捷键:ctrl+x(剪切掉)「建议收藏」pycharm快速删除一行快捷键:ctrl+x(剪切掉)

    2022年8月26日
    5
  • 鸿蒙树莓派4b,树莓派4B

    鸿蒙树莓派4b,树莓派4B作者:长空无名最近很多科技媒体都报道了树莓派4发布的消息。虽然整个板子做了大幅升级,基础价格却依然是35美元,称的上是业界良心。那号称史上性能最强的树莓派4,到底有哪些亮点呢?一起来看产品图。USB-C供电口1.5GHz四核64位ARMCortex-A72CPU1GB/2GB/4GBLPDDR4SDRAM内存(可选)全吞吐量千兆以太网(真千兆)双频802.11ac无线网络蓝牙5…

    2022年4月30日
    57
  • C#的继承_继承关系中的被继承人

    C#的继承_继承关系中的被继承人继承详解:一.继承的概念:二.基类和派生类:三.继承的作用:四.继承的特点:五.举例说明:六.继承注意事项:一.继承的概念:继承:是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。当创建一个类时,不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类/父类,这个新的类被称为派生类/子类。二.基类和派生类:基类/父类:也可以理解成生活中的父亲

    2022年9月9日
    0
  • Hadoop面试题[通俗易懂]

    Hadoop面试题[通俗易懂]文章目录你们公司集群有多少机器,内存,硬盘,CPU?你们Hadoop、Hive、Kafka都是什么版本?你们每天的数据量有多少?数据总量是多少?分布式和集群的区别?Hadoop1和Hadoop2的区别?Hadoop1Hadoop2NameNode运行处理什么是Hadoop?说一说Hadoop的shuffle过程?Hadoop中为什么需要排序?HDFS相关概念特点缺点BlockNameNodeDataNodeEditLogFSImageSecondaryNameNodefsimage和edits合

    2022年6月29日
    20
  • 深度学习 | 三个概念:Epoch, Batch, Iteration

    深度学习 | 三个概念:Epoch, Batch, Iteration

    2020年11月8日
    217

发表回复

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

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