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 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...
随机推荐
- 【BLIP】解读BLIP
BLIP,全称是Bootstrapped Language-Image Pretraining,源自<BLIP: Bootstrapping Language-Image Pre-trainin ...
- 操作系统综合题之“采用短进程优先调度算法(Shortest-Process-First,SPF)和先来先服务调度算法(First-Come,First-Served,FCFS)计算开始运行时间、结束时间、等待时间、周转时间、带权周转时间、平均周转时间”
一.问题:某系统中有四个进程,他们进入系统的时间和需要服务的时间如题下表所示(表中数值均为十进制) 进程 进入系统的时间 需要服务的时间 P1 0 100 P2 10 60 P3 25 25 P4 3 ...
- js技术之“向数组添加元素”
一.js中对于数组[]的操作很常见 下面记录一下js向数组添加元素的方法 const array=[1,2,3]; console.log('原数组:',array); 效果图 二.用push在数组后 ...
- 将查询集SQL-存为物理 OR 临时表
最近的BI项目, 就是会涉及大量的 sql, 后台处理也全是 sql 来拼接成一张物理宽表, 然后前台也是用 sql 来做各种图形骚操作. 尤其是后台处理部分, 大量的sql, 有点尴尬的事情是, s ...
- 聊聊 ruoyi-vue ,ruoyi-vue-plus ,ruoyi-vue-pro 谁才是真正的王者
笔者在知乎.Github 上搜索不少快速开发框架 ,很多的话题都绕不开若依 RuoYi . 开源世界 RuoYi 单体框架有三个不同的项目,分别是:ruoyi-vue .ruoyi-vue-plus ...
- 梯度下降(Gradient Descent)法
梯度下降法(Gradient Descent)是求解无约束最优化问题最常用的方法之一,它是一种迭代方法,每一步的主要操作就是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向. 直观的表示可用 ...
- 开启PyTorch的第一天
为积极响应导师的要求,我开启了我的深度学习之旅,成为炼丹大队的一员. 今天先是安装PyTorch,路子大家网上已经摸的很清了,我主要参考的是 https://blog.csdn.net/weixin_ ...
- @FeignClient注解配置局部超时时间、OkHttp长连接和SocketTimeoutException异常解决办法
问题描述:open feign配置OKhttp调用远程API,连续调用次数较少时,一切正常,次数非常多时(例如,连续请求600次)就抛出java.net.SocketTimeoutException: ...
- Qt的一个大坑:设置QPlainTextEdit和QTextEdit背景色
在工作中遇到一个需求,需要在播放器上显示英文字幕,当鼠标点击某个单词时, 可以显示该单词的中文含义. 播放器主窗口类直接继承自QGraphicsView,然后在其上创建一个透明的QPlainTextE ...
- ThinkBook16p2023(i9-13900H)使用m2转接oculink外接RTX4070Ti Super跑分
ThinkBook16p2023(i9-13900H)使用m2转接oculink外接RTX4070Ti Super跑分 自媒体跑分 内屏 NVIDIA GeForce RTX 4070 Ti SUPE ...