java8 List常用基本操作(去重,排序,转换等)

参考简述网址: java8 List 根据对象某个字段或多个字段去重、筛选、List转Map、排序、分组、统计计数等等

list简单方法示例如下:

一、先定义一个订单对象(Order)

public class Order {private Long id;private Long userId;private String num;private String type;private Float allAmt;private Float payAmt;private Integer orderNum;public Order(Long id, Long userId, String num, String type, Float allAmt, Float payAmt, Integer orderNum) {this.id = id;this.userId = userId;this.num = num;this.type = type;this.allAmt = allAmt;this.payAmt = payAmt;this.orderNum = orderNum;}// getting...  setting...
}

二、过滤筛选:

  List<Order> orders = Lists.newArrayList();// 筛选总金额大于1000的订单orders = orders.stream().filter(item -> item.getAllAmt() > 1000.00f).collect(Collectors.toList());

三、分组

  List<Order> orders = Lists.newArrayList();// 按照订单类型分组Map<String, List<Order>> orderGroupMap = orders.stream().collect(Collectors.groupingBy(Order::getType));

四、去重

去重并排序参考TreeSet: java TreeSet去重与排序入门

去重: Java中List集合对象去重及按属性去重

四、List 转 Map

  List<Order> orders = Lists.newArrayList();// 将订单集合转换成订单编号-应付金额 map,注意订单编号作为 key 不能重复,应先做去重处理Map<String, Float> numPayMap = orders.stream().collect(Collectors.toMap(Order::getNum, Order::getPayAmt));// 用 id 做 key 将 List 转成 MapMap<Long, Order> orderMap = orders.stream().collect(Collectors.toMap(Order::getId, item -> item));

五、排序

详细看比较器排序: Java Comparator使用指南

 List<Order> orders = Lists.newArrayList();// 按照订单总金额从高到低排序// 方式一orders.sort((o1, o2)-> o1.getAllAmt() == null ? 1 : (o2.getAllAmt() == null ? -1 : o2.getAllAmt().compareTo(o1.getAllAmt())));// 方式二orders.sort(Comparator.comparing(Order::getAllAmt, (o1, o2)-> o1 == null ? 1 : (o2 == null ? -1 : o2.compareTo(o1))));// 方式三 (allAmt 字段不能为 null, null 会导致排序失败)orders.sort(Comparator.comparing(Order::getAllAmt).reversed());// 先按照订单类型排序,再按照订单应付金额从高到低排序orders.sort(Comparator.comparing(Order::getType, (o1, o2)-> o1 == null ? 1 : (o2 == null ? -1 : o1.compareTo(o2))).thenComparing((o1, o2)-> o1.getPayAmt() == null ? 1 : (o2.getPayAmt() == null ? -1 : o2.getPayAmt().compareTo(o1.getPayAmt()))));

六、统计计数

  List<Order> orders = Lists.newArrayList();// 统计所有订单的总金额// 求和Double sum = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).sum();// 最大总金额OptionalDouble max = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).max();// 防止没有订单数据的处理Double maxAllAmt = max.isPresent() ? max.getAsDouble() : 0;// 最小总金额OptionalDouble min = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).min();// 平均总金额OptionalDouble average = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).average();

七、List 转 List (返回另一个对象)

//声明一个List集合 
List<Student> list = new ArrayList();list.add(new Student("1001", "小A"));list.add(new Student("1001", "小B"));list.add(new Student("1002", "小C"));list.add(new Student("1003", "小D"));//将List转换List   【不过滤,不去重】 
List<Teacher> teacherList = list.stream().map(stu -> {Teacher teacher = new Teacher();teacher.setNo(stu.getNo());teacher.setName(stu.getName());return teacher;}).collect(Collectors.toList());//将List转换List  【过滤,不去重】 
List<Teacher> teacherList2 =list.stream().filter( stu -> StringUtils.isNotBlank(stu.getName()) ).map(stu -> {Teacher teacher = new Teacher();teacher.setNo(stu.getNo());teacher.setName(stu.getName());return teacher;}).collect(Collectors.toList());

八、List 转 List (返回另一个对象) (多重集合,取里面集合,并合并)

//声明一个List集合
List<Student> list = new ArrayList();  list.add(new Student("1001", "小A"));  list.add(new Student("1001", "小B"));list.add(new Student("1002", "小C"));list.add(new Student("1003", "小D"));
List<Subject> subjectList = new ArrayList<>();Subject subject1 = new Subject();subject1.setId(1);subject1.setStudentList(studentList);subjectList.add(subject1);Subject subject2 = new Subject();subject1.setId(2);subject1.setStudentList(studentList);subjectList.add(subject2);Subject subject3 = new Subject();subject1.setId(3);subject1.setStudentList(studentList);subjectList.add(subject3);//将List转换List 【flatMap取集合中的集合 再合并】  (本案例:把所有科目下的报名学生,取出来,并合并。注意:学生没有去重)
List<Student> studentList =subjectList.stream().flatMap( item -> item.getStudentList().stream() ).collect(Collectors.toList());

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

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

相关文章

【linux】HAProxy七层代理

HAPorxy简介HAProxy&#xff08;High Availability Proxy&#xff09;是一款高性能、开源的负载均衡器与反向代理服务器&#xff0c;主要用于 TCP 和 HTTP 协议的流量分发&#xff0c;广泛应用于高并发、高可用的网络架构中核心特性超高性能与低资源消耗基于单进程、多线程模型…

Android 的16 KB内存页设备需要硬件支持吗,还是只需要手机升级到Android15系统就可以

Android 的16 KB内存页设备需要硬件支持吗&#xff0c;还是只需要手机升级到Android15系统就可以&#xff1f; deepseek回答&#xff1a; DeepSeek R1 思考 3 秒 思考过程 好的&#xff0c;用户现在问的是Android的16 KB内存页设备是否需要硬件支持&#xff0c;还是只需要升级到…

相机内外参矩阵:从3D世界坐标到2D像素坐标变换

相机内外参矩阵&#xff1a;从3D世界坐标到2D像素坐标变换介绍**1. 内参矩阵&#xff08;Intrinsic Matrix, K&#xff09;****2. 外参矩阵&#xff08;Extrinsic Matrix, [R|t]&#xff09;****3. 完整投影过程&#xff08;世界坐标 → 像素坐标&#xff09;****步骤1&#xf…

哈希指针与数据结构:构建可信数字世界的基石

一、哈希指针的核心原理哈希指针是一种创新型数据结构&#xff0c;融合了传统指针的定位功能与密码学哈希的验证能力&#xff1a;双重功能&#xff1a;既存储数据地址&#xff0c;又包含该数据的哈希值&#xff0c;实现数据定位与完整性验证的统一。抗篡改机制&#xff1a;数据…

java实现一个方法,isTure则程序继续往下,为false则return的链式写法

以下是实现链式条件检查的Java方法&#xff0c;采用函数式风格设计。代码包含一个Chainable类&#xff0c;支持连续的check方法和多个终止操作&#xff08;如then, orElse等&#xff09;&#xff0c;满足在条件为false时中断链式调用并返回默认值的需求&#xff1a;import java…

数据结构学习之堆

本篇我们将学习新的数据结构——二叉树。 作者的个人gitee&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.com 目录 树的概念 树形结构 非树形结构 树的相关术语 树的表示 树在实际生活上的应用 二叉树 慢二叉树 完全二叉树 二叉树的储存结构 二叉树的存储结构 顺序结构…

【csdn问答社区分析】前端开发热点问题全解析

前端时间我在csdn问答社区的前端部分"视察”了一圈发现了大家的问题主要集中在以下方面一、框架与组件库使用问题 Vue相关问题 组件化开发&#xff1a;如avue-crud组件自定义样式不生效、el-select大数据分页懒加载、element-plus表格动态列校验等。功能实现&#xff1a;包…

Pycharm2025 安装教程 免费分享 没任何套路

Pycharm 安装也是很简单的&#xff0c;简单过一下流程&#xff0c;如果需要的可以转存下载到自己电脑上。我用夸克网盘分享了「pycharm2025」&#xff0c;复制链接浏览器打开转存后即可下载。链接&#xff1a;https://pan.quark.cn/s/4bb74a939332备注&#xff1a;附带2023-202…

Javaweb————什么是超文本传输协议?

&#x1f3cd;️&#x1f3cd;️&#x1f3cd;️引言&#xff1a;什么是协议&#xff1f; 协议是一种约定&#xff0c;规定好一种信息的格式&#xff0c;如果发送方按照这种请求格式发送信息,那么接 收端就要按照这样的格式解析数据,否则就会出错&#xff0c;这就是协议 常用协…

UniappDay03

1.热门推荐-准备工作// 用defineProps获取页面参数,query const query defineProps<{type: string }>() const currHot hotMap.find((v) > v.type query.type) // 动态设置标题 uni.setNavigationBarTitle({ title: currHot!.title }) </script>2.获取热门推…

基于动态增强的 LLM 置信度方法研究

基于动态增强的 LLM 置信度方法研究 一、引言(Introduction) 大型语言模型(LLM)的性能提升高度依赖于对模型内部表征的精准调控 —— 表征工程通过优化模型中间层隐藏状态的传递规律,能够在不改变模型参数的前提下显著提升任务适应性(Wei et al., 2022)。当前主流方法中…

ComfyUI中运行Wan 2.1工作流,电影级视频,兼容Mac Windows

魔当(LM Downloader)是一个大模型应用下载工具 &#xff0c;目前 魔当 已经支持ComfyUI下载Wan 2.1视频模型。 魔当下载地址 https://seemts.com/ 先看生成效果 原始图片&#xff0c;你可以保存到自己电脑上测试 生成视频&#xff1a; 推荐提示词&#xff1a; A futurist…

CentOS 7 Linux 用 yum 安装 Docker,含 Docker 镜像无法拉取问题(即 docker pull 失败)的解决方案

CentOS 7 Linux 用 yum 安装 Docker,含 Docker 镜像无法拉取问题(即 docker pull 失败)的解决方案 本文对应的讲解视频链接:https://www.bilibili.com/video/BV1C48wzqE6T/ 文章目录 CentOS 7 Linux 用 yum 安装 Docker,含 Docker 镜像无法拉取问题(即 docker pull 失败…

XML的简略知识点

文章目录1. 基本概念2. 基本语法3. 示例4. 相关技术5. 应用场景XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;核心特点是可扩展性和自我描述性。以下是其核心知识点&#xff1a; 1. 基本概念 用途&#xff1a;主要用于数据的存储…

RustDesk 完整部署教程:支持 Web 管理后台和网页客户端远程,保姆级教学来了!

RustDesk API本项目使用 Go 实现了 RustDesk 的 API&#xff0c;并包含了 Web Admin 和 Web 客户端。RustDesk是一个远程桌面软件&#xff0c;提供了自托管的解决方案&#xff0c;官方API是收费的&#xff0c;这次咱们用到的是Github开源的第三方API源码。✅特性PC端API支持 …

​​GOFLY LIVE CHAT:Golang製オープンソース・ライブチャットシステム​

以下是为日本技术受众优化的日语版介绍文章&#xff0c;采用IT行业惯用术语和简洁表达&#xff1a; ​​GOFLY LIVE CHAT&#xff1a;Golang製オープンソース・ライブチャットシステム​​ ​​現代的なカスタマーサポートのための高性能ソリューション​​ GOFLY LIVE CHATは…

ISIS GR实验案例

一、实验拓扑路由器R1和R2都为双主控设备&#xff0c;主用板和备用板间形成备份关系。路由器间通过IS-IS协议实现网络互连&#xff0c;并提供GR机制。要求当R1通过GR方式重启IS-IS进程或者进行主备倒换时转发不中断。1、基础配置AR1 system sysname AR1 int g 0/0/0 ip add 10.…

智慧农业病虫害识别准确率↑32%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;禁止未经授权的转载与篡改。一、行业痛点&#xff1a;智慧农业的识别困境智慧农业中&#xff0c;作物病虫害的精准识别是实现精准植保的核心&#xff0c;但田间复杂环境始终…

# JsSIP 从入门到实战:构建你的第一个 Web 电话

前言 欢迎来到实时通信&#xff08;Real-Time Communication, RTC&#xff09;的世界&#xff01;如果你是一名 JavaScript 开发者&#xff0c;渴望让你的 Web 应用拥有语音通话、视频聊天甚至即时消息的能力&#xff0c;那么你来对地方了。这本书是为你量身打造的指南&#x…

【RHCSA 问答题】第 12 章 安装和更新软件包

目录什么是 RPM&#xff1f;dnf 是什么&#xff0c;它和 rpm 有什么联系和区别&#xff1f;如何设置禁止直接远程登录 root 账户&#xff1f;RHEL 中如何做才能启用对第三方存储库的支持&#xff1f;怎么理解 RHEL9 中的应用流(Application Streams)和模块(Modules)&#xff1f…