Java8提供的Stream方式进行分组GroupingBy
有时我们需要对集合进行分组操作,这时可以使用Java8提供的Stream方式进行分组。挺好用的,此处记录下。直接贴code:
Road实体:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Road {/**
* 名称
*/
private String name;/**
* 道路长度
*/
private double len;/**
* 社区划分
*/
private String community;
}
Stream分组:
Road road1 = new Road("荷花大道_东段", 100.2, "荷花社区");
Road road2 = new Road("荷花大道西段", 88.2, "荷花社区");
Road road3 = new Road("剑北大道_东段", 99.2, "剑北社区");
Road road4 = new Road("剑北大道西段", 111.4, "剑北社区");
Road road5 = new Road("剑北大道_南段", 68.9, "剑北社区")List<Road> roadList = new ArrayList<>();
roadList.add(road1);
roadList.add(road2);
roadList.add(road3);
roadList.add(road4);
roadList.add(road5);// ①根据 社区属性 分组
// 两种方式皆可
Map<String, List<Road>> roadMap1 = roadList.stream().collect(Collectors.groupingBy(Road::getCommunity));
Map<String, List<Road>> roadMap2 = roadList.stream().collect(Collectors.groupingBy(Road::getCommunity, Collectors.toList()));// ②将 道路长度大于100 的分为一组
Map<String, List<Road>> roadMap3 = roadList.stream().collect(Collectors.groupingBy(x -> {
if (x.getLen() > 100) {
return "大于100";
} else {
return "小于等于100";
}
}));// ③想得到一个通过道路长度分组并有序的结果(此处道路长度都不一样,没必要分组,只是想体现有序的返回)
TreeMap<Double, List<Road>> roadMap4 = roadList.stream().collect(Collectors.groupingBy(Road::getLen, TreeMap::new, Collectors.toList()));// ④将名字中的 大道 替换为'' 并进行分组(主要是这个,平时用的时候,有时会搞忘)
Map<String, List<Road>> roadMap5 = roadList.stream().collect(Collectors.groupingBy(x -> x.getName().replace("_", ""), Collectors.toList()));// 按自己习惯打印输出,roadMap1...roadMap5,进行结果验证比对
代码直接复制即可运行,可进行结果验证比对。
既然选择了远方,便只顾风雨兼程。-- 烟沙九洲
Java8提供的Stream方式进行分组GroupingBy的更多相关文章
- java8学习之Stream分组与分区详解
Stream应用: 继续举例来操练Stream,对于下面这两个集合: 需求是:将这两个集合组合起来,形成对各自人员打招呼的结果,输出的结果如: "Hi zhangsan".&quo ...
- 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?
写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- Java8新特性 - Stream API
Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API对集合进行操作,就类似与使用SQL执行的数据库 ...
- 【Java8新特性】面试官:谈谈Java8中的Stream API有哪些终止操作?
写在前面 如果你出去面试,面试官问了你关于Java8 Stream API的一些问题,比如:Java8中创建Stream流有哪几种方式?(可以参见:<[Java8新特性]面试官问我:Java8中 ...
- Java8 如何进行stream reduce,collection操作
Java8 如何进行stream reduce,collection操作 2014-07-16 16:42 佚名 oschina 字号:T | T 在java8 JDK包含许多聚合操作(如平均值,总和 ...
- Java8 新特性 Stream() API
新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...
- java集合(3)-Java8新增的Stream操作集合
Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...
- Java8中的Stream流式操作 - 入门篇
作者:汤圆 个人博客:javalover.cc 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...
- MySQL JDBC/MyBatis Stream方式读取SELECT超大结果集
情景: 遍历并处理一个大表中的所有数据, 这个表中的数据可能会是千万条或者上亿条, 很多人可能会说用分页limit……但需求本身一次性遍历更加方便, 且Oracle/DB2都有方便的游标机制. 对DB ...
随机推荐
- dfs 验证搜索二叉树——leetcode98
代码来自leetcode官方 一开始我自己写这个代码时只注意当前节点是否会存在空指针,并没有注意到他的孩子节点也有可能为空,绕了我好久...... /** * Definition for a bin ...
- [namespace hdk] Balanced_tree 整合
代码 #include<bits/stdc++.h> using namespace std; namespace hdk{ namespace balanced_tree{ const ...
- KPTI——可以缓解“熔断” (Meltdown) 漏洞的内核新特性
Linux 内核修复办法:内核页表隔离KPTl(kernel page table isolation) 每个进程一张页表变成两张:运行在内核态和运行在用户态时分别使用各自分离的页表 Kernel页表 ...
- js中常见的继承
1. 使用原型链继承 2. 通过构造函数继承 通过构造函数,创建的实例,可以访问构造函数的属性和方法,以及可以访问构造函数的原型对象 prototype 上的数据和方法 : 3. 组合继承(1 和 2 ...
- python中的时间处理
python程序编写中的时间处理涉及三种: 1.时间的显示: 2.时间的转换: 3.时间的运算. 时间处理模块:time模块 时间的三种表示方式: ①时间戳,从1970年1月1日开始,每过1s增加1, ...
- 一、java的简单介绍
Java语言 Java是一门面向对象的程序设计语言,在语法上Java与C和C++类似,但丢弃了其相对难理解的一些特性,如操作符重载.多继承.自动的强制类型转换,同时Java语言不使用指针,而是引用,并 ...
- Linux(Redhat 7.6)安装PG(Postgresql 9.6.0)
Linux(Redhat 7.6)安装PG(Postgresql 9.6.0) 1. 摘要 需要在Linux上安装postgres数据库,指定安装目录,简单测试各种配置.安装包下载地址: //源码 h ...
- Games104 现代游戏引擎 Picoolo环境搭建 vulkan配置
0 前言介绍 games104 现代游戏引擎课程是由 GAMES: Graphics And Mixed Environment Symposium 支持的一个课程. 如我们所视,Games并非的含义 ...
- C语言之输入输出
标准库 IO 输入输出功能并非C语言的组成部分,ANSI标准定义了相关的库函数 输入输出 <stdio.h> 流stream是与设备关联的数据的源或者目的地. 文本流:由文本行组成的序列 ...
- Mips单周期CPU设计(logisim实现)
Logisim单周期cpu设计文档与思考题 设计文档 支持指令集 指令 格式 描述(RTL) 机器码 OPCODE/FUNCT add add rd rs rt GPR[rd] <- GPR[r ...