导入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>

model类

import java.math.BigDecimal;

public class Product {
Long id;
Integer num;
BigDecimal price;
String name;
String category; 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;
} public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public Integer getNum() {
return num;
} public void setNum(Integer num) {
this.num = num;
} public BigDecimal getPrice() {
return price;
} public void setPrice(BigDecimal price) {
this.price = price;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getCategory() {
return category;
} public void setCategory(String category) {
this.category = category;
}
}
import com.fasterxml.jackson.databind.util.JSONPObject;
import com.google.gson.Gson;
import org.junit.Test;
import org.springframework.boot.autoconfigure.gson.GsonBuilderCustomizer;
import org.springframework.boot.json.GsonJsonParser;
import org.springframework.http.converter.json.GsonBuilderUtils; import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors; /**
* https://blog.csdn.net/u014231523/article/details/102535902
*/
public class GroupingByTest { @Test
public void testGroupingByTest(){
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);
List<Product> prodList = new ArrayList<Product>();
prodList.add(prod1);
prodList.add(prod2);
prodList.add(prod3);
prodList.add(prod4);
prodList.add(prod5); Map<String, List<Product>> prodMap= prodList.stream().collect(Collectors.groupingBy(Product::getCategory));
System.out.println("prodMap=" + new Gson().toJson(prodMap));
/**
* prodMap={"啤酒":[{"id":4,"num":3,"price":10,"name":"青岛啤酒","category":"啤酒"},{"id":5,"num":10,"price":15,"name":"百威啤酒","category":"啤酒"}],
* "零食":[{"id":1,"num":1,"price":15.5,"name":"面包","category":"零食"},{"id":2,"num":2,"price":20,"name":"饼干","category":"零食"},{"id":3,"num":3,"price":30,"name":"月饼","category":"零食"}]}
*/ Map<String, List<Product>> prodMap2 = prodList.stream().collect(Collectors.groupingBy(item -> item.getCategory() + "_" + item.getName()));
System.out.println("prodMap2=" + new Gson().toJson(prodMap2));
/**
* prodMap2={"零食_月饼":[{"id":3,"num":3,"price":30,"name":"月饼","category":"零食"}],
* "零食_面包":[{"id":1,"num":1,"price":15.5,"name":"面包","category":"零食"}],
* "啤酒_百威啤酒":[{"id":5,"num":10,"price":15,"name":"百威啤酒","category":"啤酒"}],
* "啤酒_青岛啤酒":[{"id":4,"num":3,"price":10,"name":"青岛啤酒","category":"啤酒"}],
* "零食_饼干":[{"id":2,"num":2,"price":20,"name":"饼干","category":"零食"}]}
*/ Map<String, List<Product>> prodMap3= prodList.stream().collect(Collectors.groupingBy(item -> {
if(item.getNum() < 3) {
return "3";
}else {
return "other";
}
}));
System.out.println("prodMap3=" + new Gson().toJson(prodMap3));
/**
* prodMap3={"other":[{"id":3,"num":3,"price":30,"name":"月饼","category":"零食"},
* {"id":4,"num":3,"price":10,"name":"青岛啤酒","category":"啤酒"},
* {"id":5,"num":10,"price":15,"name":"百威啤酒","category":"啤酒"}],
* "3":[{"id":1,"num":1,"price":15.5,"name":"面包","category":"零食"},{"id":2,"num":2,"price":20,"name":"饼干","category":"零食"}]}
*/ Map<String, Map<String, List<Product>>> prodMap4= prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.groupingBy(item -> {
if(item.getNum() < 3) {
return "3";
}else {
return "other";
}
})));
System.out.println("prodMap4=" + new Gson().toJson(prodMap4));
/**
* prodMap4={"啤酒":{"other":[{"id":4,"num":3,"price":10,"name":"青岛啤酒","category":"啤酒"},{"id":5,"num":10,"price":15,"name":"百威啤酒","category":"啤酒"}]},
* "零食":{"other":[{"id":3,"num":3,"price":30,"name":"月饼","category":"零食"}],
* "3":[{"id":1,"num":1,"price":15.5,"name":"面包","category":"零食"},{"id":2,"num":2,"price":20,"name":"饼干","category":"零食"}]}}
*/ Map<String, Long> prodMap5 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.counting()));
System.out.println("prodMap5=" + new Gson().toJson(prodMap5));
/**
* prodMap5={"啤酒":2,"零食":3}
*/ Map<String, Integer> prodMap6 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.summingInt(Product::getNum)));
System.out.println("prodMap6=" + new Gson().toJson(prodMap6));
/**
* prodMap6={"啤酒":13,"零食":6}
*/ Map<String, Product> prodMap7 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(Product::getNum)), Optional::get)));
System.out.println("prodMap7=" + new Gson().toJson(prodMap7));
/**
* prodMap7={"啤酒":{"id":5,"num":10,"price":15,"name":"百威啤酒","category":"啤酒"},
* "零食":{"id":3,"num":3,"price":30,"name":"月饼","category":"零食"}}
*/ Map<String, Set<String>> prodMap8 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.mapping(Product::getName, Collectors.toSet())));
System.out.println("prodMap8=" + new Gson().toJson(prodMap8));
/**
* prodMap8={"啤酒":["青岛啤酒","百威啤酒"],"零食":["面包","饼干","月饼"]}
*/ }
}

java8 lambda Group分组示例的更多相关文章

  1. java8 快速入门 lambda表达式 Java8 lambda表达式10个示例

    本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...

  2. Java8 lambda表达式10个示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  3. Java8 lambda表达式10个示例<转>

    例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...

  4. 浅析mongodb中group分组

    这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...

  5. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

  6. Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  7. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  8. java8 lambda表达式应用

    1.用lambda表达式实现Runnable非常简单// Java 8之前: new Thread(new Runnable() { @Override public void run() { Sys ...

  9. java8 lambda表达式和函数式编程

    什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法 (可以有def ...

  10. java8 Lambda表达式的新手上车指南(1)

    背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...

随机推荐

  1. Metasploit 实现木马生成、捆绑及免杀

    ​简介: 在渗透测试的过程中,避免不了使用到社会工程学的方式来诱骗对方运行我们的木马或者点击我们准备好的恶意链接.木马的捆绑在社会工程学中是我们经常使用的手段,而为了躲避杀毒软件的查杀,我们又不得不对 ...

  2. SpringBoot中几种好用的代码生成器(基于Mybatis-plus生成entity、mapper、xml等)

    前言 熟悉Spring框架的同学一定都知道MVC开发模式吧,控制器(Controller).业务类(Service).持久层(Repository).数据库映射(Mapper).各种DO类构成了我们服 ...

  3. 错误记录——mysql5.7连接失败,服务无法启动

    起因: 上周安装完mysql后,成功新建了数据库,一切都是正常的,于是就先搁置一旁.今天周一过来,却突然发现无法连接mysql了. 过程: 第一反应是服务没有启动,毕竟重启了电脑,说不定是服务没有自动 ...

  4. ansible(14)--ansible的get_url模块

    1. get_url模块 功能:通过互联网下载软件至被控端本地: 主要参数如下: 参数 说明 url 资源文件在互联网上的具体url地址 dest 文件下载位置的绝对路径 mode 文件下载位置的绝对 ...

  5. MySQL:根据指定日期加365天,当前时间距离明年的指定的日期还有多少天-SQL

    一.数据准备 /* Navicat Premium Data Transfer Source Server : songweipeng Source Server Type : MySQL Sourc ...

  6. 记一次线上Redis内存占用过高、大Key问题的排查

    问题背景 在一个风和日丽的下午,公司某项目现场运维同学反馈,生产环境3个Redis的Sentinel集群节点内存占用都很高,达到了17GB的内存占用量. 稍加思索,应该是某些Key的Value数据体量 ...

  7. XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南

    XML Schema描述了 XML 文档的结构.XML Schema语言也称为 XML Schema Definition(XSD). <?xml version="1.0" ...

  8. 网络拓扑—FTP服务搭建

    目录 FTP服务搭建 网络拓扑 配置网络 FTP PC 安装FTP服务 配置FTP服务 FTP用户配置-1 PC机访问FTP站点 IE浏览器访问 终端访问 FTP用户配置-2 PC机访问ftp站点 I ...

  9. vue3 如何在 jsx中使用 component 组件

    component 组件不像其它的内置组件(tansition.transitionGroup),可以直接从 vue 中直接导出,所有要在 jsx 使用component就要使用 h 函数 使用 vu ...

  10. 【c++】求解八皇后问题

    为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法.一共92个解 解决思路:一层层回溯,采用深度优先的递归算法. 动态分配的数 ...