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

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

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

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

(0)


相关推荐

  • Java多态理解_什么是java多态

    Java多态理解_什么是java多态多态:同样的引用调用同样的方法却做了不同的事情。概述:在设计一个方法时,通常希望该方法具备定的通用性。例如要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传人犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象就是多态。在Java中为了实现多态,允许使用一个父类类型的变…

    2022年10月24日
  • redis(五)Jedis连接redis[通俗易懂]

    redis(五)Jedis连接redis[通俗易懂]一、创建项目1.1、创建项目,导入依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.0.0</version></dependency>注意:远程服务器器可以连通p

  • mybatis看这一篇就够了,简单全面一发入魂

    mybatis看这一篇就够了,简单全面一发入魂文章目录Mybatis概述快速入门原生开发示例基于Mapper代理的示例基于注解的示例应用场景主键返回批量查询动态SQL缓存关联查询延迟加载逆向工程PageHelper分页插件MybatisPlusMybatis概述mybatis是什么?有什么特点?它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低什么是ORM?ObjectRelationMapping,对象关系映射。对象指的是Java

  • 整理关于web项目如何防止CSRF和XSS攻击的方法

    整理关于web项目如何防止CSRF和XSS攻击的方法

    2021年10月13日
  • Some STR Fun

    Some STR Fun

  • linux tty_linux tty

    linux tty_linux ttyLinux中的tty与pts终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。 Teletype是最早出现的一种终端设备——可以称作电传打字机,由Teletype公司生产。tty在Linux系统的设备特殊文件目录/dev/下。终端特殊设备文件一般有以下几种:1、串行端口终端(/dev/ttySn)串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这

发表回复

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

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