java8 list统计(求和、最大、最小、平均)

2023-10-31

 

list.stream().mapToDouble(User::getHeight).sum()//和
list.stream().mapToDouble(User::getHeight).max()//最大
list.stream().mapToDouble(User::getHeight).min()//最小
list.stream().mapToDouble(User::getHeight).average()//平均值

当然,除了统计double类型,还有int和long

bigdecimal需要用到reduce求和

 

Double示例:

public class HelloWorld {
    private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
    public static void main(String[] args) {
        Random random = new Random();
        List<User> list = new ArrayList<>();
        for(int i=1;i<=5;i++) {
            double weight = random.nextDouble() * 100 + 100;//随机身高:100-200
            User u = new User(i, "用户-" + i, weight);
            list.add(u);
        }
        System.out.println("用户:" + list);
        double sum = list.stream().mapToDouble(User::getHeight).sum();
        System.out.println("身高 总和:" + df.format(sum));
        double max = list.stream().mapToDouble(User::getHeight).max().getAsDouble();
        System.out.println("身高 最大:" + df.format(max));
        double min = list.stream().mapToDouble(User::getHeight).min().getAsDouble();
        System.out.println("身高 最小:" + df.format(min));
        double average = list.stream().mapToDouble(User::getHeight).average().getAsDouble();
        System.out.println("身高 平均:" + df.format(average));

    }
    private static class User{
        Integer id;
        String name;
        double height;//身高

        public User(Integer id, String name, double height) {
            this.id = id;
            this.name = name;
            this.height = height;
        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public double getHeight() {
            return height;
        }

        public void setHeight(double height) {
            this.height = height;
        }

        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", height=" + height +
                    '}';
        }
    }

}

执行结果:

用户:
    [User{id=1, name='用户-1', height=192.15677342306662}, 
     User{id=2, name='用户-2', height=196.35056058694772}, 
     User{id=3, name='用户-3', height=101.96271958293853}, 
     User{id=4, name='用户-4', height=110.83134063008366}, 
     User{id=5, name='用户-5', height=106.27720636757154}]
身高 总和:707.58
身高 最大:196.35
身高 最小:101.96
身高 平均:141.52

 

 

BigDecimal示例:

public class HelloWorld {
    private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
    public static void main(String[] args) {
        Random random = new Random();
        List<User> list = new ArrayList<>();
        for(int i=1;i<=5;i++) {
            double weight = random.nextDouble() * 100 + 100;//随机身高:100-200
            list.add(new User(i, new BigDecimal(weight).setScale(BigDecimal.ROUND_HALF_UP, 2)));
        }
        System.out.println("list:" + list);
        BigDecimal add = list.stream().map(User::getHeight).reduce(BigDecimal.ZERO, BigDecimal::add);
        System.out.println("身高 总和:" + df.format(add));
        Optional<User> max = list.stream().max((u1, u2) -> u1.getHeight().compareTo(u2.getHeight()));
        System.out.println("身高 最大:" + df.format(max.get().getHeight()));
        Optional<User> min = list.stream().min((u1, u2) -> u1.getHeight().compareTo(u2.getHeight()));
        System.out.println("身高 最小:" + df.format(min.get().getHeight()));

    }
    private static class User{
        Integer id;
        BigDecimal height;//身高

        public User(Integer id, BigDecimal height) {
            this.id = id;
            this.height = height;
        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public BigDecimal getHeight() {
            return height;
        }

        public void setHeight(BigDecimal height) {
            this.height = height;
        }

        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", height=" + height +
                    '}';
        }
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java8 list统计(求和、最大、最小、平均) 的相关文章

  • 我想将对象列表添加到 firestore 文档中,-flutter

    我想将对象列表添加到 firestore 文档 我定义了产品数据模型 我还有类别数据模型 我想将类别列表添加到 firestore 中的产品文档中 我将类别添加到临时列表 然后将值放入product categories 产品 类别 类别t
  • 如何在 Python 中连接两个列表?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 如何在 Python 中连接两个列表 Example listone 1 2 3 lis
  • 如何组合 3 个或更多 CompletionStages?

    如果有 2 个 CompletionStages 我可以将它们与thenCombine method CompletionStage a aCompletionStage getA CompletionStage b bCompletion
  • 尝试通过 Java 8 中的 JDBC-ODBC 连接到 .accdb 文件时出现 ClassNotFoundException

    我正在 Eclipse EE IDE 中的 Java 项目中工作 我必须在其中查询 accdb文件 问题是当我尝试加载驱动程序然后连接到数据库时 它给了我一个异常错误 My code try String filePath myfilepa
  • python中的列表列表的集合

    我有一个列表列表 mat 1 2 3 4 5 6 1 2 3 7 8 9 4 5 6 我想转换成set即删除重复列表并从中创建一个新列表 其中仅包含unique lists 在上述情况下 所需的答案将是 1 2 3 4 5 6 7 8 9
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 使用 for 循环填充 python 字典列表

    我试图用 for 循环填充字典列表 但最终结果显示 for 循环填充的最后一个字典覆盖了所有先前字典的值 我尝试调整以下中提出的解决方案 如何使用循环填充 Python 字典 https stackoverflow com question
  • 嵌套字段的 Comparator.comparing(...)

    假设我有一个这样的域模型 class Lecture Course course getters class Course Teacher teacher int studentSize getters class Teacher int
  • 两个布尔列表之间的逻辑运算

    我得到了一个奇怪的结果 我尝试应用and or the orpython 中 2 个布尔列表的运算符 事实上 我得到的结果与我的预期完全相反 True False False and True True False gt True True
  • scala 返回列表中的第一个 Some

    我有一个清单l List T1 目前我正在执行以下操作 myfun T1 gt Option T2 val x Option T2 l map myfun l flatten find gt true The myfun函数返回 None
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 在 Haskell 中合并两个列表

    无法弄清楚如何合并两个列表通过以下方式在哈斯克尔 INPUT 1 2 3 4 5 11 12 13 14 OUTPUT 1 11 2 12 3 13 4 14 5 我想提出一个更懒的合并版本 merge ys ys merge x xs y
  • Java 8 lambda 和抽象类的接口扩展

    说我想宣布Spring的RowMapper 但不是创建动态类 而是实现一个实现 RowMapper 的抽象类 这是我的方法签名 SqlProcedure declareRowMapper RowMapper
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • php如何生成动态list()?

    根据我的理解 这就是 list 的工作原理 list A1 A2 A3 array B1 B2 B3 所以在帮助下list 我们可以相应地从数组中分配值 这是我的问题 如何生成动态list 1 基于数据库返回结果 我不确定有多少 但我将其全
  • Python:如何在不先创建整个列表的情况下计算列表的总和?

    通常我们必须 1 声明一个列表 2 使用以下方法计算该列表的总和sum 但现在我希望指定一个以 1 开头 间隔为 4 100 个元素的列表 如下所示 1 5 9 13 17 21 25 29 33 37 我不想涉及数学公式 所以 1 如何在
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • BoolQueryBuilder 和 wildcardQuery withFilter 查询

    一 BoolQueryBuilder查询说明 BoolQueryBuilder qb QueryBuilders boolQuery 1 返回的文档必须满足must子句的条件 并且参与计算分值 qb must QueryBuilder qu
  • 腾讯云数据库TDSQL:分布式数据库,你真的了解吗?

    分布式数据库进入人们的视野已经很久了 相对于传统的集中式数据库 分布式数据库在高性能 高可用 平滑拓展 高可靠 低成本等许多方面具有优势 但时至今日 关于分布式数据库 似乎一直缺少足够权威和客观的解读 现在 国家白皮书来了 为了明确分布式数
  • Vue SSR(vue服务端渲染)

    SSR的应用场景 1 SEO需求 SEO Search Engine Optimization 搜索引擎优化 是一种利用搜索引擎规则 提高网站在搜索引擎内自然排名的技术 通常这需要页面内容在页面加载完成时便已经存在 前后端分离的纯前端项目
  • ECCV 2022

    ECCV 2022 Learning Implicit Feature Alignment Function for Semantic Segmentation概述与代码分析 论文 https arxiv org abs 2206 0865
  • SPEED 飞车扩容改造:敢于对过去说不

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 wincent 导语 敢于对过去的脚本说不 前言 QQ飞车作为一款竞速游戏 从08年至今十年光阴 依然坚挺 能运维一款这样的产品 非常的荣幸 压力和动力都是有的 有压力才有动力
  • 一段程序:SAP使用ODI方法为WORD填充数据

    未做测试 仅记备查 原文地址 http blog sina com cn s blog 3eefd36c01008cmz html 原理 通过 CALL METHOD DOCUMENT gt GET MAIL MERGE INTERFACE
  • Linux学习系列一:Linux的简单介绍以及命令行的基本操作

    这个系列的Linux教程主要参考刘遄老师的 Linux就该这么学 用的系统是RHEL8 如果遇见一些命令出现问题 请首先检查自己的系统是否一致 如果不一致 可网上查一下系统间某些命令之间的差异 目前设计的这个Linux学习系列的目录如下 会
  • 促进内容营销策略的 12 个 ChatGPT 技巧

    作为营销大亨 您可能并不陌生于创建脱颖而出并让您的读者着迷的内容的重要性 然而 集思广益 制作和编辑内容以及推广它可能是耗时 压倒性的 让我们面对现实吧 你宁愿外包它 或者至少得到一些帮助 你可能听说过它 实际上 谁没有听说过 但让我重新认
  • 2021年Linux技术总结(三):根文件系统(rootfs)

    一 根文件系统简介 Linux系统三大块 U boot kernel以及最后这个rootfs 跟文件系统 在kernel中 启动流程的最后会调用 prepare namespace 函数 挂载根文件系统 这里就是挂载的本篇要说的 根文件系统
  • You have mail in /var/spool/mail/root

    转载http www fedora hk linux yumwei show 17 html 安装完LINUX后经常使用终端远程登录 登录后经常出现You have new mail in var spool mail root的提示 很是
  • 如何在不卸载Revit插件的情况下禁用插件?

    如何在不卸载Revit插件的情况下禁用某个插件 这个问题对于Revit开发的朋友 不是问题 但对于Revit的终端用户 可能就无从下手 解决此问题的答案就是禁用插件的 addin文件 Revit的插件注册方式之一就是通过 addin文件 我
  • 图书系统相关代码

    import java util Objects import java util Scanner Author Ben Date 2020 10 29 13 32 public class Test3 图书馆接口 Library 成员方法
  • python修改voc格式数据集的xml文件的name标签(class_label)

    import os path import xml dom minidom import xml etree ElementTree as ET path D yolov4 tiny pytorch master yolov4 tiny p
  • SurfaceView和普通view的区别及简单使用

    1 SurfaceView介绍 SurfaceView第一印象它是一个view 因为它继承了View 有两个直接子类GLSurfaceView VideoView 但根据SDK文档SurfaceView和普通的view又有较大区别 最显著的
  • redis持久化-归纳

    部分参考地址 较详细 https baijiahao baidu com s id 1654694618189745916 简明扼要 https blog csdn net qq 39291929 article details 10343
  • 数据库相关及SQL语句(MySQL和SqlServer)基础

    以下是我自己开发的总结 欢迎指正 0 概括 sql语句的大小写问题 要根据数据库的大小写敏感配置而决定 以下随意 数据库建模软件PowerDesigner要熟练使用 了解物理模型生成建表sql和对数据库进行逆向工程建模 会操作即可 sqls
  • Vue2 与Vue3的区别?面试题

    Vue 2和Vue 3是Vue js框架的不同版本 在面试中经常涉及到它们之间的区别 以下是Vue 2和Vue 3的主要区别 性能提升 Vue 3在性能方面进行了优化 Vue 3引入了更高效的Diff算法 提高了渲染性能 此外 Vue 3还
  • sqlserver新增主键自增_SQLSERVER自增主键

    SQLSERVER自增主键 SQLServer 中含自增主键的表 通常不能直接指定ID值插入 可以采用以下方法插入 1 SQLServer 自增主键创建语法 identity seed increment 其中 seed 起始值 incre
  • 连续正弦信号使用FFT做频谱分析

    一个偶对称的连续波 如何用FFT做频谱分析 用正弦信号做了个例子 不论任何连续信号 都可以仿照这个例子进行频谱分析 Name sinfft m Desc 使用FFT求y sin 2 pi 10 t 的频谱 抽样频率为40hz 大于信号最高频
  • java8 list统计(求和、最大、最小、平均)

    list stream mapToDouble User getHeight sum 和 list stream mapToDouble User getHeight max 最大 list stream mapToDouble User