Java8 stream collect groupBy分组的简单例子
实体类People,有个返回list的buildPeopleList方法,方便测试。
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /**
* @author: rhyme
* @date: 2019-09-26 17:31
* @topic: "主题"
* @description: "描述"
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class People {
private String name; private String character; private String sex; private int age; public static People buildDefault() {
return People.builder().name("L").character("optimistic").sex("female").age(24).build();
} public static List<People> buildPeopleList() {
People p1 = People.builder().name("L").character("optimistic").sex("female").age(24).build();
People p2 = People.builder().name("Zhang").character("optimistic").sex("female").age(23).build();
People p3 = People.builder().name("Hu").character("shy").sex("female").age(25).build();
People p4 = People.builder().name("Y").character("Righteous").sex("male").age(24).build();
return new ArrayList<>(Arrays.asList(p1, p2, p3, p4));
}
}
测试类GroupByTest,分别根据性别分组,统计各个性别人数,以及各个性别映射姓名。
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.util.CollectionUtils; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.stream.Collectors; /**
* @author: rhyme
* @date: 2019-10-14 15:59
* @topic: "主题"
* @description: "描述"
*/
public class GroupByTest {
private List<People> people;
private BiConsumer soutKV;
private Map result; @Before
public void init() {
people = People.buildPeopleList();
soutKV = (k, v) -> System.out.println(k + ":" + v);
} @After
public void soutResult() {
if (!CollectionUtils.isEmpty(result)) {
result.forEach(soutKV);
}
} /**
* 根据性别分组
*/
@Test
public void groupBySex() {
result = people.stream().collect(
Collectors.groupingBy(People::getSex)
);
} /**
* 分别统计不同性别各自的人数
*/
@Test
public void groupBySexCount() {
result = people.stream().collect(
Collectors.groupingBy(People::getSex, Collectors.counting()
));
} /**
* 分别统计不同性别各自的name列表
*/
@Test
public void groupBySexName() {
result = people.stream().collect(
Collectors.groupingBy(
People::getSex,
Collectors.mapping(People::getName, Collectors.toSet())
));
} }
Java8 stream collect groupBy分组的简单例子的更多相关文章
- java8 stream按某个字段分组,允许分组字段是null
Map<String, List<Dto>> deviceMap = deviceList.stream().collect(Collectors.groupingBy(Dto ...
- Java8 stream 中利用 groupingBy 进行多字段分组求和
Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map 对集合按照单个属性分组 case1: List<String> items ...
- Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
点波关注不迷路,一键三连好运连连! 先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里. 统计员工的最高薪资.平均薪资.薪资之和. 将员 ...
- 对Java8 stream的简单实践
最近学习很多Java8方面的新特性,特地做了一些简单的实践和总结. import java.util.*; import java.util.stream.Collectors; public cla ...
- java8 stream按对象多个属性对集合进行分组,并进行组装数据
如图,数据库查出来的数据: 需求是按menu_id和menu_name分组,stream实现最简单, stream里面只有按一个属性分组的,但是可以利用string简单变换一下: List<Js ...
- java8 stream自定义分组求和并排序
public static void main(String[] args) { List<GroupDetailDTO> list = new ArrayList<>(); ...
- Java8 Stream分组
//根据排课id分组 Map<Integer, List<Schedule4Homework>> idSchedule4HomeworksMap = schedule4Home ...
- java8 stream lambda 一个例子
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Pa ...
- java8:(Lambda 表达式,Supplier,@FunctionalInterface,foreach(),Optional,Stream().collect,双冒号,joining,partitioningBy分区,collectingAndThen,filter())
1.Lambda 表达式: 引导:http://www.cnblogs.com/yulinfeng/p/8452379.html DEMO1: List<String> names1 = ...
- 简洁又快速地处理集合——Java8 Stream(下)
上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...
随机推荐
- Excel工具类之“参数汇总”
一.SXSSFWorkbook技术 1.冻结行数 代码 SXSSFWorkbook wb = new SXSSFWorkbook(); SXSSFSheet sheet = wb.createShee ...
- 分页工具之【PageHelper】
1.PageHelper技术 依赖 <!-- PageHelper --> <dependency> <groupId>com.github.pagehelper& ...
- js技术之获取当前元素的上一个/下一个兄弟级元素等元素的方法(获取上一个/下一个input)
一.说明 jQuery获取: jQuery.parent(expr),找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span&q ...
- The Eclipse executable launcher was unable to locate its companion shared library
win10,笔者是安装eclipse2018.03的情况下,想安装java2019EE遇到的路径问题 1.解决方法 找到配置文件 打开,用记事本打开的话会糊成一行,建议用其他方式打开,例如笔者所用的N ...
- APP商城模块地址
个人将平时用到比较多的功能,做成模块案例的形式放到app商城,供大家下载使用,欢迎下载 下载地址:https://apps.odoo.com/apps/modules/browse?search=me ...
- 「Log」NOIP 2023 游记
Day 0 打了大半天板子,然后开摆. 打块,快下班的时候玩了猜词游戏. 回家睡大觉. Day 1 早上起床状态良好,收拾收拾就出门了,跟爸妈吃了肯德基,然后坐车到三校区. 才看到 cc0000 之前 ...
- 如何在FastAPI中轻松实现OAuth2认证并保护你的API?
title: 如何在FastAPI中轻松实现OAuth2认证并保护你的API? date: 2025/06/09 05:16:05 updated: 2025/06/09 05:16:05 autho ...
- 使用ajax来进行登录验证
servlet: 1 @WebServlet("/login.do") 2 public class AjaxLoginServlet extends HttpServlet { ...
- 【渗透测试】不怎么水的洞之IP伪造
漏洞原理 有些应用程序有记录用户IP的功能或者限制IP白名单的功能,如果应用程序从请求头字段获取用户IP,可能会被攻击者伪造,来达到欺骗服务器的目的. 案例一 发现操作日志页面有个记录用户IP功能 插 ...
- HyperMesh打开保存文件与面板功能使用
打开和保存文件 在 HyperMesh 中,打开和保存文件是最常用的命令.本节介绍 HyperMesh 打开和保存文件的多种方式.后续的练习中假定用户已经熟练使用 HyperMesh 进行文件打开和保 ...