Stream流 - 取最大对象、最小对象

news2024/9/27 5:37:29

需求:Dnl 对象包含属性 ygz(有功总)、wgz(无功总),统计 Dnl 对象集合的最大有功总、最小有功总的对象。

集合:
对象1:ygz=11.1、wgz=22.2
对象2:ygz=22.1、wgz=66.2
对象3:ygz=33.1、wgz=44.2
对象4:ygz=null、wgz=55.2
对象5:ygz=33.1、wgz=null

结果:
最大有功总:对象3
最小有功总:对象1
最大无功总:对象2
最小无功总:对象1

public class Test3 {
    public static void main(String[] args) throws ClassNotFoundException {

        ArrayList<Dnl> dnls = new ArrayList<>();
        dnls.add(new Dnl("11.1","22.2"));
        dnls.add(new Dnl("22.1","66.2"));
        dnls.add(new Dnl("33.1","44.2"));
        dnls.add(new Dnl(null,"55.2"));
        dnls.add(new Dnl("33.1",null));

        //计算总和
        BigDecimal sumYgz = dnls.stream().map(vo -> new BigDecimal(vo.getYgz() == null ? "0" : vo.getYgz())).reduce(BigDecimal.ZERO, BigDecimal::add);
        BigDecimal sumWgz = dnls.stream().map(vo -> new BigDecimal(vo.getWgz() == null ? "0" : vo.getWgz())).reduce(BigDecimal.ZERO, BigDecimal::add);
        System.out.println("sumYgz=" + sumYgz + ",sumWgz=" + sumWgz);

        //最大值
        //Optional<T> max(Comparator<? super T> comparator);
        Optional<Dnl> max = dnls.stream().filter(vo -> vo.getYgz()!= null).max(new Comparator<Dnl>() {
            @Override
            public int compare(Dnl o1, Dnl o2) {
                BigDecimal b1 = new BigDecimal(o1.getYgz());
                BigDecimal b2 = new BigDecimal(o2.getYgz());
                BigDecimal subtract = b1.subtract(b2);
                return subtract.compareTo(BigDecimal.ZERO);
            }
        });
        Dnl dnlmax = max.get();
        System.out.println("最大有功总:" + dnlmax);

        //lamda表达式简写
        Optional<Dnl> max1 = dnls.stream().filter(vo -> vo.getWgz() != null).max((o1, o2) -> new BigDecimal(o1.getWgz()).subtract(new BigDecimal(o2.getWgz())).compareTo(BigDecimal.ZERO));
        Dnl dnlmax1 = max1.get();
        System.out.println("最大无功总:" + dnlmax1);

        //最小值
        //Optional<T> min(Comparator<? super T> comparator);
        Optional<Dnl> min = dnls.stream().filter(vo -> vo.getYgz()!= null).min(new Comparator<Dnl>() {
            @Override
            public int compare(Dnl o1, Dnl o2) {
                BigDecimal b1 = new BigDecimal(o1.getYgz());
                BigDecimal b2 = new BigDecimal(o2.getYgz());
                BigDecimal subtract = b1.subtract(b2);
                return subtract.compareTo(BigDecimal.ZERO);
            }
        });
        Dnl dnlmin = min.get();
        System.out.println("最小有功总:" + dnlmin);

        //lamda表达式简写
        Optional<Dnl> min1 = dnls.stream().filter(vo -> vo.getWgz() != null).min((o1, o2) -> new BigDecimal(o1.getWgz()).subtract(new BigDecimal(o2.getWgz())).compareTo(BigDecimal.ZERO));
        Dnl dnlmin1 = min1.get();
        System.out.println("最小无功总:" + dnlmin1);
    }
}

在这里插入图片描述

源码可见,Optional<T> max(Comparator<? super T> comparator);Optional<T> min(Comparator<? super T> comparator); 均是接收一个比较器。

lamda 表达式可以简化 Comparator 的实现方法。

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

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

相关文章

2023网络安全面试题汇总(附答案)

大家好&#xff0c;我是小V ,本人 17 年就读于一所普通的本科学校&#xff0c;20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂&#xff0c;现就职于某大厂安全联合实验室。 又到了毕业季&#xff0c;大四的漂亮学姐即将下架&#xff0c;大一的小学妹还在来的路上&…

网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

朋友们如果有需要全套《黑客&网络安全入门&进阶学习包》&#xff0c;可以&#x1f447;下方自取&#xff08;如遇问题&#xff0c;可以在评论区留言哦&#xff09;~ &#x1f447;&#x1f447;&#x1f447; 《黑客&网络安全入门&进阶学习包》 &#x1f446;&…

STM32F407硬件I2C实现MPU6050通讯(CUBEIDE)

STM32F407硬件I2C实现MPU6050通讯 文章目录 STM32F407硬件I2C实现MPU6050通讯cubeide设置写操作与读操作函数实现复位&#xff0c;读取温度&#xff0c;角度等函数封装mpu6050.cmpu6050.h代码分析 DMP移植1.修改头文件路径为自己的头文件路径2.修改I2C读写函数为自己mcu平台的读…

6.12黄金何时走出区间震荡?后市如何布局

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周一(6月12日)亚市盘中&#xff0c;现货黄金维持震荡&#xff0c;金价现报1960美元/盎司。本周黄金交易员将迎来美国CPI数据以及美联储利率决议&#xff0c;预计将对…

vue3+ts+vite实现pinia

本篇文章主要从事3部分 单个store下的文件进行使用模块下进行使用(pinia不像vuex那样使用模块化了 直接在store下定义ts文件即可)pinia持久化使用 安装pinia : cnpm install pinia 安装持久化 cnpm install pinia-plugin-persistedstate 1.单文件: index.ts (先不要管user.ts)…

详细讲解!如何模拟后台API调用场景

目录 简介 Postman 迁移至 ApiFox ApiFox 导入 Postman ApiFox 展示 API 调用场景 增加断言验证 API 使用测试执行场景 API 序列 总结 简介 在进行Web性能测试时&#xff0c;我们不仅需要测试前端页面的性能&#xff0c;还需要测试与后台API的交互性能&#xff0c;以及…

Spring Cloud常用组件介绍(Netflix、Alibaba)

Spring Cloud常用组件介绍 文章目录 **Spring Cloud常用组件介绍**一、说明**1.1.什么是Spring Cloud**1.2.Spring Cloud的组件选型 **二、组件介绍****2.1.服务注册与发现****2.1.1.Netflix Eureka****1&#xff09;分布式模型****2&#xff09;主要组件****3&#xff09;工作…

骑行陡坡村,潇潇洒洒出品

2023年6月10日群峰环抱小村庄盘山陡坡蜜桃香唇干舌燥咬一口甘甜香沁嘴边淌久旱叶枯悯农急乌云密布盼雷响但得雷神甘露下雨中狂奔又何妨

高效搞定文件重命名和归类!使用文件批量改名高手轻松实现

文件夹管理是计算机使用中非常重要的一项任务&#xff0c;对于个人电脑用户或企业机构来说&#xff0c;都需要对文件夹进行有效管理归类和重命名。 第一步&#xff0c;打开文件批量改名高手&#xff0c;进入文件批量重命名板块并点击添加文件&#xff0c;选择需要重命名的文件…

IOS应用跳转URL scheme和Universal Links

简介 IOS常见的跳转方式有URL scheme和Universal Links。这两个均可以实现App之间的跳转&#xff0c;以及通过网页实现跳转到对应的App内。通过本文章可以了解到两者的区别和具体的使用方法&#xff0c;以及参数的传递。应对常见的几种跳转需求。 URL scheme:需要配置URL sch…

增值税高不再是难事,只需一招即可解决!

《税筹顾问》专注于园区招商&#xff0c;您的贴身节税小能手&#xff0c;合理合规节税&#xff01; 任何一家企业&#xff0c;都逃脱不了一种税费的缴纳&#xff0c;那就是增值税。但其实小规模纳税人增值税缴纳&#xff0c;是可以享受到一些税收优惠照顾的&#xff0c;未达到月…

看完阿里大牛的LeetCode算法刷题手册后,成功在四面字节斩获offer

最近有看到很多朋友想进大厂&#xff0c;四面竟然都考了算法&#xff0c;很多同学面对算法的问题都很头大&#xff0c;因为自己做项目很难用到&#xff0c;但是但凡高薪的职位面试都会问到。最近我整理了一份刷题宝典&#xff0c;这份刷题宝典&#xff0c;也让我进了心仪的大厂…

MyBatis Plus 解决大数据量查询慢问题

常规查询 流式查询 游标查询 大数据量操作的场景大致如下&#xff1a; 数据迁移 数据导出 批量处理数据 在实际工作中当指定查询数据过大时&#xff0c;我们一般使用分页查询的方式一页一页的将数据放到内存处理。但有些情况不需要分页的方式查询数据或分很大一页查询数…

实用工具指南:2个提升效率的互联网利器

工具一&#xff1a; 字体酷站是全球最大的字体网址导航网站&#xff0c;收录了大量优质的字体素材和字体设计资源。该网站拥有丰富多样的字体分类和标签&#xff0c;用户可以根据需求选择不同类型、不同风格的字体&#xff0c;如商务字体、手写字体、卡通字体等。同时&#xf…

B+树单表超过2500万行的性能影响

&#xff08;有许多人是用青春的幸福作成功的代价的。——莫扎特&#xff09; B树 关于B树的原理请查看这篇文章 分析 MySQL采用了索引组织表的形式组织数据&#xff0c;叶子节点存储数据&#xff0c;非叶子节点存储主键与页面号的映射关系。若用户的主键长度是8字节时&…

基于MATLAB涡度通量数据处理

查看原文>>>基于MATLAB涡度通量数据处理实践技术应用 【内容简述】&#xff1a; 基于MATLAB语言、以实践案例为主&#xff0c;提供代码、原理与操作结合1、以涡度通量塔的高频观测数据为例&#xff1a;基于MATLAB上机操作2、涡度通量观测基本概况&#xff1a;观测技术…

用友 畅捷通T+ DownloadProxy.aspx 任意文件读取漏洞

1. 漏洞描述 用友 畅捷通T DownloadProxy.aspx文件存在任意文件读取漏洞&#xff0c;攻击者通过漏洞可以获取服务器上的敏感文件. 2.FOFA app"畅捷通-TPlus" 3.漏洞复现 登录页面 验证POC /tplus/SM/DTS/DownloadProxy.aspx?preload1&Path../../Web.Confi…

2.3 逻辑代数的基本公式和常用公式

博主介绍&#xff1a;一个爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;程序猿之数字电路 学习目标&#xff1a; 1. 学习基本概念&#xff1a;首先&#xff0c;了解逻辑代数的基本概念和术语&#xff0c;如命题、逻辑运算符&#xff08;与…

探索上位机编程的挑战与乐趣

上位机编程的难度取决于多个因素&#xff0c;包括您的编程经验、所使用的编程语言和开发工具、应用程序的复杂程度等等。 如果您具备一定的编程经验并且熟悉所选的编程语言和开发工具&#xff0c;那么上位机编程可能相对容易上手。上位机编程通常涉及与外部设备&#xff08;如…

Unity入门1——窗口布局

文章目录 一、Hierarchy 窗口 二、Scene 窗口 三、工具栏 四、Game 窗口 五、Project 工程窗口 六、Inspector 窗口 七、Console 窗口 一、Hierarchy 窗口 ​ 在这里创建对象、操作对象。 ​ 快捷键&#xff1a;F2&#xff1a;对象改名 ​ CtrlC&#xff1a;复制 ​ CtrlV&…