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

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

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


相关推荐

  • shiro框架是什么_中国历史知识框架

    shiro框架是什么_中国历史知识框架Shiro 1.权限管理概述2.Shiro权限框架  2.1概念  2.2ApacheShiro与SpringSecurity区别3.Shiro认证  3.1基于ini认证  3.2自定义Realm–认证4.Shiro授权  4.1基于ini授权  4.2自定义realm–授权5.项目集成shiro认证-授权注意点  5.1认证  5.2授权  5.3注解@RequiresPermissions()  5.4标签式权限验证6.S

    2022年9月8日
  • 大数据采集技术概述

    大数据采集技术概述大数据采集是指从传感器和智能设备、企业在线系统、企业离线系统、社交网络和互联网平台等获取数据的过程。数据包括RFID数据、传感器数据、用户行为数据、社交网络交互数据及移动互联网数据等各种类型的结构化、半结构化及非结构化的海量数据。不但数据源的种类多,数据的类型繁杂,数据量大,并且产生的速度快,传统的数据采集方法完全无法胜任。所以,大数据采集技术面临着许多技术挑战,一方面需要保证数据…

    2022年6月24日
  • 循环队列 基本概念「建议收藏」

    循环队列 基本概念「建议收藏」循环队列是队列的一种特殊形式。首先介绍队列,然后引申出循环队列。队列又称为“先进先出”(FIFO)线性表限定插入操作只能在队尾进行,而删除操作只能在队首进行队列也可以采用顺序存储结构或链表结构来实现,分别称为顺序队列和链队列队列的顺序表示—顺序队列用一组连续的存储单元依次存放从队首到队尾的元素,附设两个指针head和tail分别指向队首元素和队尾元素的位置,(有的地方用f…

    2022年5月6日
  • 编译命令行终端 swift

    编译命令行终端 swift

    2022年1月13日
  • lspci命令详解_模态振型分析解读

    lspci命令详解_模态振型分析解读lspci详解分析一、PCI简介PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux下的设备驱动,所以,重点关注编程接口。PCI是PeripheralComponentInterconnect(外围设备互…

    2022年9月9日
  • linux修改文件没有权限设置,Linux下修改文件权限(所有权)

    linux修改文件没有权限设置,Linux下修改文件权限(所有权)Linux与Unix是多用户操作系统,所以文件的权限与所有权的实现就显得很有必要;每个文件主要与三组权限打交道,分别是用户(user),用户组(group),其他用户(other)用户(u)是文件的所有者,通常有所有的文件的操作权限用户组(g)是多个用户的集合,可能有文件的部分访问权,相当于各用户之间的共享文件其他(o)是指文件所有者和用户组成员之外的任何人使用ls-l可以显示出当前目录下的文件…

    2022年9月12日

发表回复

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

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