stream进行分组统计

//		//groupingBy分组
//		Map<Integer, Long> map = houseList.stream().collect(Collectors.groupingBy(House::getBuildId, Collectors.counting()));
//        //控制台输出map
//		map.forEach((k,v)->{
//			System.out.println("k="+k+",v="+v);
//		});
//
//		//方式二:使用1.8 stream流
//		Map<Object, Integer> sum = houseList.stream().collect(Collectors.groupingBy(House::getBuildId, Collectors.summingInt(p -> ConvertUtil.obj2Int(p.get("count")))));
//		sum.forEach((k, v) -> {
//			newItems.add(ImmutableMap.of("daily", String.valueOf(k), "count", String.valueOf(v)));
//		});//		Map<String,Map<String, Map<String, List<House>>>> result = houseList.stream().collect(
//
//				Collectors.groupingBy(House::getBuildId,
//
//						Collectors.groupingBy(House::getClass,
//
//								Collectors.groupingBy(House::getBuildId)))
//
//		);

Map  buildingCount = houseList.stream().collect(Collectors.groupingBy(House::getBuildId));int buildingCountSize = buildingCount.size();

public void testStreamGroupBy() {List<Map<String, Object>> items = Lists.newArrayList();Map<String, Object> map = Maps.newHashMap();map.put("daily", "2018-01-10");map.put("count", 20);items.add(map);map = Maps.newHashMap();map.put("daily", "2018-01-11");map.put("count", 80);items.add(map);map = Maps.newHashMap();map.put("daily", "2018-01-12");map.put("count", 21);items.add(map);map = Maps.newHashMap();map.put("daily", "2018-01-10");map.put("count", 28);items.add(map);final List<Map<String, Object>> newItems = Lists.newArrayList();//方式一: 使用遍历for (int i = 0; i < result.size(); i++) {Map<String, Object> oldMap = result.get(i);boolean isContain = false;for (int j = 0; j < newList.size(); j++) {Map<String, Object> newMap = newList.get(j);if (newMap.get("daily").equals(oldMap.get("daily"))) {for (String key : oldMap.keySet()) {newMap.put(key, oldMap.get(key));oldMap.put("count", (int) newMap.get("count") + (int) oldMap.get("count"));}isContain = true;break;}}if (!isContain) {newItems .add(oldMap);}}System.out.println("方式一:" + newItems );//方式二:使用1.8 stream流Map<Object, Integer> sum = items.stream().collect(Collectors.groupingBy(m -> m.get("daily"), Collectors.summingInt(p -> ConvertUtil.obj2Int(p.get("count")))));sum.forEach((k, v) -> {newItems.add(ImmutableMap.of("daily", String.valueOf(k), "count", String.valueOf(v)));});System.out.println("方式二:"+newItems);}

java stream分组排序统计求和//java stream多条件分组//其中Student是学生,将学生依次以grade(年级) -> class(班级) -> teacher(任课老师) 分组Map<String,Map<String, Map<String, List<Student>>>> result = students.stream().collect(Collectors.groupingBy(Student::getGrade,Collectors.groupingBy(Student::getClass,Collectors.groupingBy(Student::getTeacher))));//多条件去重students.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getAge() + ";" + o.getName()))), ArrayList::new)).forEach(s -> println(s));//filter过滤students.stream().filter(s -> s.getAge() == 10).forEach(s -> println(s));//sorted排序students.stream().sorted(Comparator.comparing(s-> s.getAge())).forEach(s -> println(s));//1.自然序排序students.stream().sorted();//2.自然序逆序元素,使用Comparator 提供的reverseOrder() 方法students.stream().sorted(Comparator.reverseOrder());//3.按照年龄倒序排序students.stream().sorted(Comparator.comparing(Student::getAge).reversed());//4.不借助stream排序//分数正序排序chineseScores.sort(Comparator.comparing(Integer::intValue));//分数倒序排序chineseScores.sort(Comparator.comparing(Integer::intValue).reversed());//年龄正序排序students.sort(Comparator.comparing(Student::getAge));//年龄倒序排序students.sort(Comparator.comparing(Student::getAge).reversed());//limit方法限制最多返回多少元素students.stream().limit(2).forEach(s -> println(s));//不要前多n个元素,n大于满足条件的元素个数就返回空的流students.stream().skip(2).forEach(s -> println(s));//最大值 最小值Optional<User> min = students.stream().min(Comparator.comparing(Student::getAge));println(min);Optional<User> max = students.stream().max(Comparator.comparing(Student::getAge));println(max);//转单集合students.stream().map(Student::getName).forEach(name -> println(name));students.stream().mapToInt(Student::getAge).forEach(age -> println(age));students.stream().mapToDouble(Student::getScoreOfChinese).forEach(scoreOfChinese -> println(scoreOfChinese));students.stream().mapToLong(Student::getAge).forEach(getAge -> println(getAge));//转单集合求和students.stream().mapToDouble(Student::getScoreOfChinese).sum();//查找匹配指定数据是否存在//allMatch方法与anyMatch差不多,表示所有的元素都满足才返回true。noneMatch方法表示没有元素满足boolean anyMatch = students.stream().anyMatch(s -> s.getAge() == 100);boolean allMatch = students.stream().allMatch(s -> s.getName() == 'hello word');boolean noneMatch = students.stream().noneMatch(s -> s.getStudentId() == '10010');//简化操作 最大值,最小值,求和Optional<Integer> sum = list.stream().map(User::getAge).reduce(Integer::sum);Optional<Integer> max = list.stream().map(User::getAge).reduce(Integer::max);Optional<Integer> min = list.stream().map(User::getAge).reduce(Integer::min);println(sum);println(max);println(min);//统计IntSummaryStatistics statistics = students.stream().collect(Collectors.summarizingInt(User::getAge));double average = statistics.getAverage();long count = statistics.getCount();int max = statistics.getMax();int min = statistics.getMin();long sum = statistics.getSum();//转setSet<User> collect = students.stream().collect(Collectors.toSet());Iterator<User> iterator = collect.iterator();while(iterator.hasNext()) {System.out.println(iterator.next().getUserId());}//转mapMap<String, User> collect = students.stream().collect(Collectors.toMap(Student::getName, s -> s));for (String name : collect.keySet()) {//得到每个key多对用value的值Student s = collect.get(name);println(s);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js实现页面跳转重定向的几种方式

转载自 js实现页面跳转重定向的几种方式 这篇文章主要介绍js实现页面跳转重定向的几种方式,需要的朋友可以参考下 第一种&#xff1a; <script language"javascript"type"text/javascript"> window.location.href"http://shanghepinpai.c…

二分查找+思路分析

思路分析 代码实现 package com.atguigu.search;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ //注意&#xff1a;使用二分查找的前提是&#xff0c;该数组是有序的 public class BinarySearch {public static void main(String[] args) {int arr[]{1,8,10,89,1000,1234};int…

SQLServer On Linux Package List on CentOS

问题引出 “鸟儿啊&#xff0c;到底SQLServer on Linux肚里装了多少东西&#xff0c;在我们的CentOS系统安装了哪些物理文件呢&#xff1f;”&#xff0c;老鸟这天火急火燎的问道。“这个啊&#xff1f;让本鸟帮你一探究竟。”&#xff0c;菜鸟耐心回答道。 问题分析 菜鸟一边想…

开发环境 Minio 添加桶的操作流程-页面操作

命令操作 d开发环境 Minio 添加桶的操作流程_摇曳的精灵的博客-CSDN博客_minio创建桶 页面操作

python 可视化数据库_python实现地址分布可视化

当你知道某些详细地址信息&#xff0c;该如何利用。本文通过调用百度地图接口&#xff0c;实现用户可视化展示&#xff0c;便于更清楚地了解用户。注册百度地图开放平台帐号Python调用通过http调用接口格式如下&#xff1a;全选复制放进笔记http://api.map.baidu.com/geocoder/…

冬至快乐

男生关注会更帅&#xff0c;女生关注会更美&#xff01;冬至冬至到&#xff0c;吃水饺&#xff0c;颗颗都有年味道。头常挠&#xff0c;口常笑&#xff0c;睿智快乐常围绕。摇摇头&#xff0c;晃晃脑&#xff0c;轻松健康直到腰。扭扭臂&#xff0c;捏捏脚&#xff0c;健康到底…

JavaScript原生添加移除class的方法

转载自 JavaScript原生添加移除class的方法 1.JavaScript原生移除class方法 window.onload function () {var stamp document.getElementById("btGetCode"); //根据id查找到该标签removeClass(stamp, "can-code"); //调…

二分查找(一次查找多个相同的值)

package com.atguigu.search;import java.util.ArrayList; import java.util.List;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ //注意&#xff1a;使用二分查找的前提是&#xff0c;该数组是有序的 public class BinarySearch {public static void main(String[] args) {int…

介绍Portable PDB

为了调试编译的应用程序&#xff0c;有必要将IL代码或二进制的机器代码与源代码行进行匹配。虽然数据可以嵌入在应用程序中&#xff0c;但这会显著增加EXE或DLL文件的大小。取而代之的是&#xff0c;通常会使用单独的“symbols”文件。在Windows平台上&#xff0c;这被称为PDB或…

RedisGeo实现增删改查 java计算指定坐标最近的距离并排序

利用Redis的Geo功能实现查找附近的位 - 云社区 - 腾讯云 package com.easy.hotel.pms.util;import com.easy.hotel.common.data.tenant.TenantContextHolder; import com.easy.hotel.pms.mapper.CommunityMapper; import com.easy.hotel.pms.service.impl.CommunityServiceImpl…

openglshader实现虚拟场景_opengl+shader

1、环境介绍&#xff1a;】软件 &#xff1a;visual studio编程语言&#xff1a;opengl库 &#xff1a;glad glfw【2、内容介绍】-- 绘制场景&#xff1a;场景1&#xff1a; 一片沙漠中&#xff0c;一本书&#xff0c;四周出现 5 个自球&#xff0c;逐渐被黑雾笼罩场景2&#x…

没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

今天在开发指纹识别的项目时候&#xff0c;出现了个问题&#xff0c;这个问题之前也没有见过&#xff0c;所以无从下手&#xff0c;只能从网上找解决方法&#xff0c;找了半天说要注册com组件啥的&#xff0c;我老是注册不成功&#xff0c;后来瞎捣鼓终于解决了&#xff0c;原因…

JS获取自定义属性data-*值与dataset

转载自 JS获取自定义属性data值 <body> <div id"tree" data-leaves"47" data-plant-height"2.4m"></div> <script> var tree document.getElementById("tree"); //getAttribute()取值属性 console.log(tr…

插值查找+代码实现+注意事项

图解 代码实现 package com.atguigu.search;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ public class InsertValueSearch {public static void main(String[] args) {int[] arrnew int[100];for (int i 0; i < 100; i) {arr[i]i1;}// S…

SQL Server on Linux的文件和目录结构

问题引入 “鸟儿啊&#xff0c;我记得你写过一篇《SQLServer On Linux Package List on CentOS》的文章&#xff0c;从这篇文章&#xff0c;我们很清楚的知道了SQL Server on Linux包含有哪些必要的包。那么&#xff0c;我们怎么知道SQL Server on Linux到底包含哪些重要的文件…

3级调度 fpga_FPGA的软核、硬核、固核

“核”现在的FPGA设计&#xff0c;规模巨大而且功能复杂&#xff0c;因此设计的每一个部分都从头开始是不切实际的。一种解决的办法是&#xff1a;对于较为通用的部分可以重用现有的功能模块&#xff0c;而把主要的时间和资源用在设计中的那些全新的、独特的部分。这就像是你在…

ssm中spring mvc找不到控制器,报错404

今晚在整合ssm的时候&#xff0c;出现了个错误&#xff0c;自己的都感觉醉了。之前没学过spring mvc&#xff0c;所以做起来感觉有点很陌生&#xff0c;在网上看了看代码之后就呼呼呼的写代码了。写了2小时&#xff0c;终于把环境搭建好了。然后做了个小案例查询全部的数据&…

JS 获取浏览器、显示器 窗体等宽度和高度

转载自 JS 获取浏览器、显示器 窗体等宽度和高度 网页可见区域宽&#xff1a;document.body.clientWidth 网页可见区域高&#xff1a;document.body.clientHeight 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽) 网页可见区域高&#xff1a;documen…

斐波那契查找+思路分析

图解 代码实现 package com.atguigu.search;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ public class FibonacciSearch {public static int maxSize 20;public static void main(String[] args) {int[] arr {1, 8, 10, 89, 1000, 1234};System.o…

OSS.Social微信项目标准库介绍

经过本周的努力&#xff0c;昨晚终于完成OSS.Social微信项目的标准库支持&#xff0c;当前项目你已经可以同时在.net framework和.net core 中进行调用&#xff0c;调用方法也发生了部分变化&#xff0c;这里我简单分享下&#xff0c;主要包含下边几个部分&#xff1a; 移植后…