iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java8中的Collectors.groupingBy怎么用
  • 808
分享到

java8中的Collectors.groupingBy怎么用

2023-06-14 05:06:26 808人浏览 安东尼
摘要

这篇“java8中的Collectors.groupingBy怎么用”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“java8中的Collectors.groupingBy怎么用”,小编整理了以

这篇“java8中的Collectors.groupingBy怎么用”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“java8中的Collectors.groupingBy怎么用”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。

Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组

数据准备:

public Product(Long id, Integer num, BigDecimal price, String name, String cateGory) { this.id = id; this.num = num; this.price = price; this.name = name; this.category = category;} Product prod1 = new Product(1L, 1, new BigDecimal("15.5"), "面包", "零食");Product prod2 = new Product(2L, 2, new BigDecimal("20"), "饼干", "零食");Product prod3 = new Product(3L, 3, new BigDecimal("30"), "月饼", "零食");Product prod4 = new Product(4L, 3, new BigDecimal("10"), "青岛啤酒", "啤酒");Product prod5 = new Product(5L, 10, new BigDecimal("15"), "百威啤酒", "啤酒");List<Product> prodList = Lists.newArrayList(prod1, prod2, prod3, prod4, prod5);

分组

按照类目分组:

Map<String, List<Product>> prodMap= prodList.stream().collect(Collectors.groupingBy(Product::getCategory)); //{"啤酒":[{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10},{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}],"零食":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5},{"category":"零食","id":2,"name":"饼干","num":2,"price":20},{"category":"零食","id":3,"name":"月饼","num":3,"price":30}]}

按照几个属性拼接分组:

Map<String, List<Product>> prodMap = prodList.stream().collect(Collectors.groupingBy(item -> item.getCategory() + "_" + item.getName())); //{"零食_月饼":[{"category":"零食","id":3,"name":"月饼","num":3,"price":30}],"零食_面包":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5}],"啤酒_百威啤酒":[{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}],"啤酒_青岛啤酒":[{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10}],"零食_饼干":[{"category":"零食","id":2,"name":"饼干","num":2,"price":20}]}

根据不同条件分组

Map<String, List<Product>> prodMap= prodList.stream().collect(Collectors.groupingBy(item -> { if(item.getNum() < 3) { return "3"; }else { return "other"; }})); //{"other":[{"category":"零食","id":3,"name":"月饼","num":3,"price":30},{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10},{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}],"3":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5},{"category":"零食","id":2,"name":"饼干","num":2,"price":20}]}

多级分组

要实现多级分组,我们可以使用一个由双参数版本的Collectors.groupingBy工厂方法创 建的收集器,它除了普通的分类函数之外,还可以接受collector类型的第二个参数。那么要进 行二级分组的话,我们可以把一个内层groupingBy传递给外层groupingBy,并定义一个为流 中项目分类的二级标准。

Map<String, Map<String, List<Product>>> prodMap= prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.groupingBy(item -> { if(item.getNum() < 3) { return "3"; }else { return "other"; }}))); //{"啤酒":{"other":[{"category":"啤酒","id":4,"name":"青岛啤酒","num":3,"price":10},{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15}]},"零食":{"other":[{"category":"零食","id":3,"name":"月饼","num":3,"price":30}],"3":[{"category":"零食","id":1,"name":"面包","num":1,"price":15.5},{"category":"零食","id":2,"name":"饼干","num":2,"price":20}]}}

按子组收集数据

求总数

Map<String, Long> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.counting())); //{"啤酒":2,"零食":3}

求和

Map<String, Integer> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.summingInt(Product::getNum))); //{"啤酒":13,"零食":6}

把收集器的结果转换为另一种类型

Map<String, Product> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(Product::getNum)), Optional::get))); //{"啤酒":{"category":"啤酒","id":5,"name":"百威啤酒","num":10,"price":15},"零食":{"category":"零食","id":3,"name":"月饼","num":3,"price":30}}

联合其他收集器

Map<String, Set<String>> prodMap = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.mapping(Product::getName, Collectors.toSet()))); //{"啤酒":["青岛啤酒","百威啤酒"],"零食":["面包","饼干","月饼"]}

以上是“java8中的Collectors.groupingBy怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: java8中的Collectors.groupingBy怎么用

本文链接: https://www.lsjlt.com/news/268359.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java8中的Collectors.groupingBy怎么用
    这篇“java8中的Collectors.groupingBy怎么用”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“java8中的Collectors.groupingBy怎么用”,小编整理了以...
    99+
    2023-06-14
  • java8中的Collectors.groupingBy用法详解
    Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组 数据准备: public Product(Long id, Integer num, Big...
    99+
    2024-04-02
  • Java8中CompletableFuture怎么使用
    今天小编给大家分享一下Java8中CompletableFuture怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1...
    99+
    2023-06-29
  • Java8中Stream怎么使用
    今天小编给大家分享一下Java8中Stream怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、概述Java 8 是...
    99+
    2023-07-02
  • Java8中的CompletableFuture类怎么使用
    本篇内容主要讲解“Java8中的CompletableFuture类怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java8中的CompletableFuture类怎么使用”吧!Java...
    99+
    2023-07-06
  • mac系统中Java8怎么用
    小编给大家分享一下mac系统中Java8怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.下载jdk8 1)官网下载地址Java8下载官网地址:http:/...
    99+
    2023-05-30
    mac java8
  • Java8 StreamAPI中的map()方法怎么使用
    今天小编给大家分享一下Java8 StreamAPI中的map()方法怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-07-05
  • Java8的LocalDateTime怎么使用
    这篇文章主要讲解了“Java8的LocalDateTime怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java8的LocalDateTime怎么使用”吧!前言LocalDateTi...
    99+
    2023-07-05
  • Optional怎么中Java8 项目中使用
    这篇文章给大家介绍Optional怎么中Java8 项目中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允...
    99+
    2023-06-06
  • java8中的四种方法怎么引用
    这篇文章主要介绍“java8中的四种方法怎么引用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java8中的四种方法怎么引用”文章能帮助大家解决问题。1、构造方法引用Test test&n...
    99+
    2023-06-30
  • Java8中stream和functional interface怎么用
    这篇文章主要为大家展示了“Java8中stream和functional interface怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java8中stream和functional i...
    99+
    2023-05-30
    java8 stream functional
  • Java8中Function接口怎么使用
    这篇文章主要介绍了Java8中Function接口怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java8中Function接口怎么使用文章都会有所收获,下面我们一起来看看吧。Java 8 中 Func...
    99+
    2023-07-02
  • JAVA8 Stream流中的reduce()方法怎么使用
    这篇文章主要介绍“JAVA8 Stream流中的reduce()方法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JAVA8 Stream流中的reduce()方法怎么使...
    99+
    2023-07-05
  • 怎么使用Java8中接口的新特性
    这篇文章主要介绍“怎么使用Java8中接口的新特性”,在日常操作中,相信很多人在怎么使用Java8中接口的新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java8中接口的新特性”的疑惑有所帮助!...
    99+
    2023-06-25
  • Java8 中的ParallelStream
    目录1、Stream API 2、ParallelStreams执行原理3、ParallelStreams注意事项前言: 并行编程势不可挡,Java从1.7开始就提供了Fork/J...
    99+
    2024-04-02
  • Java8中Stream有什么用
    这篇文章主要为大家展示了“Java8中Stream有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java8中Stream有什么用”这篇文章吧。Java8对集合提供了一种流式计算的方式,这...
    99+
    2023-06-25
  • Java8中的方法与构造器怎么引用
    这篇“Java8中的方法与构造器怎么引用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8中的方法与构造器怎么引用”文...
    99+
    2023-07-05
  • lambda表达式怎么在Java8中使用
    lambda表达式怎么在Java8中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。lambda 表达式的语法lambda 表达式由参数,->,以及函数体三部分组成。其...
    99+
    2023-05-31
    java8 lambda ava
  • 怎么在Java8中使用Lambda表达式
    怎么在Java8中使用Lambda表达式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. lambda表达式介绍lambda表达式是Java8提供的新特性之一,也可以称之为闭...
    99+
    2023-06-14
  • Java8新特性怎么使用
    本篇内容介绍了“Java8新特性怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java语言新特性Lambda表达式Lambda表达式...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作