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 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...
随机推荐
- Font Awesome文档使用手册
Font Awesome 字体为您提供可缩放矢量图标,它可以被定制大小.颜色.阴影以及任何可以用CSS的样式. 使用文档:https://fa4.uihtm.com/ Font Awesome 是一套 ...
- Flutter适配HarmonyOS 5开发知识地图
还在为Flutter适配HarmonyOS 5头疼?这份知识地图,用实战解析+高频避坑指南,帮你快速打通跨平台开发任督二脉! ▌为什么这份资源值得你收藏? 分层进阶:从环境搭建→插件开发→性能优化,匹 ...
- algolia使用配置教程-为SSG静态站增加algolia搜索功能
要构建SSG静态站点时,一般为了方便增加algolia搜索框,但这里algolia配置使用时用很多的坑,折腾了我好几天,网上没有一个可用的教程. 自己弄了几天,终于搞明白里面的道道了,现在分享出来给大 ...
- Java子类上加lombock注解@Data或者@ToString,日志中不包括父类的属性
问题描述:Java子类上加lombock注解@Data或者@ToString,在翻阅日志的时候,发现不打印父类的属性. 问题分析:@Data在编译时会自动为实体类添加setter.getter和toS ...
- 边学边练,福利无限 —— OceanBase DBA 实战营(第一季)火热进行中!
首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 "老纪的技术唠嗑局",会持续更新和 OceanBase 相关的各种技术内容.欢迎感兴趣的朋友们关注! 活动背景 20 ...
- 鸿蒙Next仓颉开发语言中的数据类型总结分享
大家好,今天总结一下仓颉中的数据类型. 数字 仓颉中的数字类型复杂多样,首先分为整型和浮点型两种,也就是Int类型和Float类型,Int类型有Int.Int8.Int32.Int64几种类型,Flo ...
- UFT 关于excel及datatable的处理
1. excel 2. datatable
- MySQL数据库连接时区问题
<!-- 组件扫描--> <context:component-scan base-package="com"></context:component ...
- jQuery取某个div下所有被选中的checkbox
jQuery取某个div下所有被选中的checkbox_weixin_36975992的博客-CSDN博客 var categoryCheckedInfo = $("#selectCareg ...
- ado.net基础(一)
什么是ado.net 使用.net技术操作数据库的一套类库. 命名空间 system.data:描述数据的命名空间 system.data.sqlclient:专门针对sqlserver的命名空间 四 ...