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 ...
随机推荐
- webpack笔记-loader的详细使用介绍(四)
loader 基本上都是第三方类库,使用时需要安装,有一些 loader 还需要安装额外的类库,例如 less-loader 需要 less,babel-loader 需要 babel 等. load ...
- 【论文解读】RLAIF基于人工智能反馈的强化学习
[论文解读]RLAIF基于人工智能反馈的强化学习 一.简要介绍 人类反馈强化学习(RLHF)可以有效地将大型语言模型(LLM)与人类偏好对齐,但收集高质量的人类偏好标签是一个关键瓶颈.论文进行了一场R ...
- Go日志管理库zap
一.zap介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1.能够将事件记录到文件中,而不是应用程序控制台. 2.日志切割-能够根据文件大小.时间或间隔等来切割日志文件. ...
- transaction_timeout:达到事务超时时终止会话
功能实现背景说明 我们已经有两个参数来控制长事务:statement_timeout 和 idle_in_transaction_session_timeout.但是,如果事务执行的命令足够短且不超过 ...
- 41.key发生变化,dom还会复用吗
会复用但是可能会产生没有必要的真实DOM更新 ,会降低渲染效率 :比如使用 index 作为 key 值 :
- 阿里云服务器安装mysql镜像
新创建的服务器首先需要创建安全组,开放端口然后重启服务器 登陆远程服务器,具体操作步骤如下 #拉取镜像 docker pull mysql:5.7 #查看镜像是否拉取到 docker images # ...
- Java跳出当前的多重嵌套循环的3种解决方法
Java跳出当前的多重嵌套循环的3种解决方法(以双重嵌套为例) 方法一:使用一个布尔型的标记变量flag 1 public static void method1() { 2 boolean flag ...
- LLM应用实战: OpenAI多代理新作-Swarm
1.背景 本qiang~关注到OpenAI两周前发布的轻量级多代理框架Swarm,因此想要深入了解了一下,运行了官方提供的例子,整理并总结一些心得体会~ 源码非常简单,各位看官们可以小读一下,本文采用 ...
- vue关于图片参数赋值
解决方法: 加个require()就可以了 <img :src="require('../xxx/images/'+imgsrc+'.png')"/> export d ...
- Vue生态工具组合
文章目录 1.Vue版本 2.构建工具 3.包管理器 4.状态管理 5.http库 6.UI库 7.站点生成器 8.优质内容收录 vue生态工具多种多样,我们要如何选择并组合起来才最好呢.接下来给大家 ...