集合中removeIf和stream流的filter差异比较

一、背景

今天在看同事写的代码的时候,看到了一个我很少使用的集合操作,一般我习惯过滤集合的数据的时候,采用stream流当中的filter操作,但是同事使用的是removeIf,对此简单看了看两者的区别,对此进行记录一下。

二、比较

2.2 相同点

removeIfstream流的filter它们都能实现过滤/删除集合中元素的功能。

2.2 不同点
  • removeIfList接口的方法,主要用于移除满足特定条件的元素。它适用于需要直接在原集合上进行修改的场景,例如删除满足某个条件的记录。
  • streamfilterStream接口的方法,主要用于创建一个新的流,其中包含满足给定条件的元素。它适用于需要对数据进行进一步处理或转换的场景,例如筛选出满足某个条件的数据并生成新的集合。

removeIfstream流的filter都能实现过滤功能,但removeIf会改变原集合,而filter不会。

2.3 效率比较
  • removeIf的效率取决于底层集合的实现。对于ArrayList等基于数组的集合,removeIf的时间复杂度为O(n),因为它需要遍历整个集合来找到要删除的元素。而对于LinkedList等基于链表的集合,removeIf的时间复杂度为O(n^2),因为每次删除元素时都需要更新链表的结构。
  • streamfilter的效率通常较高,因为它是基于函数式编程的思想设计的。在执行过程中,它会将原始数据转换为一个中间数据流,然后通过过滤条件对中间数据流进行过滤,最后再将过滤后的数据流转换为最终结果。这种设计方式可以有效地减少不必要的计算和内存占用,从而提高程序的性能。

三、代码示例

   // 使用removeIf删除满足条件的元素List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));numbers.removeIf(num -> num % 2 == 0); // 删除偶数System.out.println(numbers); // 输出 [1, 3, 5]// 使用stream的filter筛选出满足条件的数据并生成新的集合List<Integer> evenNumbers = numbers.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());System.out.println(evenNumbers); // 输出 [2, 4]

四、总结

removeIf适用于直接在原集合上进行修改的场景,而streamfilter适用于需要对数据进行进一步处理或转换的场景。
removeIf的效率取决于底层集合的实现,而streamfilter通常具有较高的效率。
• 在使用removeIf时,需要注意其直接修改原集合的特性;而在使用streamfilter时,可以通过collect方法将过滤后的数据收集到新的集合中。

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

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

相关文章

STM32F103C8开发板 STM32最小系统核心板 AD硬件原理图+PCB封装文件分享

STM32F103C8开发板原理图 原理图和PCB下载地址&#xff1a; STM32F103C8开发板 STM32最小系统核心板 AD硬件原理图PCB封装文件.zip: https://url83.ctfile.com/f/45573183-1269573020-8f85b2?p7526 (访问密码: 7526)

新手指南:如何使用Python快速上手深度学习

新手指南&#xff1a;如何使用Python快速上手深度学习 对于刚入门的新手而言&#xff0c;开始深度学习的旅程可能看起来既令人兴奋又略感困惑。Python是进行深度学习研究和应用的首选语言&#xff0c;因为它拥有丰富的库和框架&#xff0c;能够简化深度学习模型的开发和测试过…

前端使用axios下载文件和上传文件

首先&#xff0c;axios实例在发起下载文件请求时&#xff0c;应该配置responseType: ‘blob’&#xff0c;例如&#xff1a; // axios发起下载文档请求 export const downloadDoc (id: string) > {return request.get(/downloadDoc?id${id}, {// 参考官方文档https://www…

Bio-Info 每日一题:Rosalind-04-Rabbits and Recurrence Relations

&#x1f389; 进入生物信息学的世界&#xff0c;与Rosalind一起探索吧&#xff01;&#x1f9ec; Rosalind是一个在线平台&#xff0c;专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战&#xff0c;帮助用户从基础到高级掌握生物信息学知识。无论你是初…

指针在C/C++中的魔力:一级指针与二级指针

什么是指针&#xff1f; 指针是一个变量&#xff0c;它的值是另一个变量的地址。在C/C中&#xff0c;指针是一个强大的工具&#xff0c;可以让我们直接操作内存地址。指针的主要用途包括动态内存分配、数组和字符串处理、函数参数传递等。 一级指针 一级指针&#xff08;也称为…

聊一聊大数据需求的流程

大致的流程&#xff1a;需求对接、口径梳理、数据开发、任务发布、任务监控、任务保障 流程图 startuml skinparam packageStyle rectangleactor 需求方 participant 数据BP as 数据组 participant 离线数仓 participant 实时数仓需求方 -> 数据组: 提出需求 数据组 -> …

Android 日志实时输出

开发中如果只是单纯的应用开发&#xff0c;Android studio基本上可以满足&#xff0c;但是如果应用和系统联调那就得用logcat实时输出了&#xff0c;我这里都是总结的实用经验&#xff0c;没那么多花里胡哨 Android 日志实时输出 1、输出 android log //分步&#xff0c;进入s…

造假高手——faker

在测试写好的代码时通常需要用到一些测试数据&#xff0c;大量的真实数据有时候很难获取&#xff0c;如果手动制造测试数据又过于繁重无聊&#xff0c;显得不够优雅&#xff0c;今天我们介绍的faker这个轮子可以完美的解决这个问题。faker是一个用于生成各种类型假数据的库&…

Spring AOP(实现,动态原理)详解版

Spring AOP 1.什么是AOP&#xff1f;1.1引入AOP依赖1.2编写AOP程序 2.Spring AOP核⼼概念2.1 切点(Pointcut)2.2连接点(Join Point)2.3通知(Advice)2.4 切⾯(Aspect) 3.通知类型3.1顺序3.2切⾯优先级 Order3.3 ⾃定义注解 MyAspect 4. Spring AOP 原理5 动态代理怎么实现5.1 JD…

D455相机RGB与深度图像对齐,缓解相机无效区域的问题

前言 上一次我们介绍了深度相机D455的使用&#xff1a;intel深度相机D455的使用-CSDN博客&#xff0c;我们也看到了相机检测到的无效区域。 在使用Intel深度相机D455时&#xff0c;我们经常会遇到深度图中的无效区域。这些无效区域可能由于黑色物体、光滑表面、透明物体以及视…

基于大模型 Gemma-7B 和 llama_index,轻松实现 NL2SQL

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

数字滤波器和模拟滤波器(一)

模拟滤波器和数字滤波器&#xff08;一&#xff09; 下面介绍模拟滤波器和数字滤波器的频率响应的异同&#xff0c;以及如何使用python地scipy.signal来绘制其频谱响应和冲激阶跃响应。在第二期将谈到如何设计模拟滤波器和数字滤波器。 在正文之间&#xff0c;应该介绍连续时…

嵌入式学习——Linux高级编程复习(目录IO、软硬连接、makefile)——day38

1. 目录IO 目录IO是指在计算机程序中对文件目录进行操作的一系列输入输出功能。这些操作允许程序创建、读取、修改和删除目录结构。在Unix/Linux系统和类似系统中&#xff0c;目录被视为特殊的文件&#xff0c;可以对其进行打开、读取、写入&#xff08;修改&#xff09;和关闭…

LLMs,即大型语言模型

LLMs&#xff0c;即大型语言模型&#xff0c;是一类基于深度学习的人工智能模型&#xff0c;它们通过海量的数据和大量的计算资源进行训练&#xff0c;可以理解和生成自然语言。LLMs的核心架构是Transformer&#xff0c;其关键在于自注意力机制&#xff0c;使得模型能够同时对…

腾讯元宝APP上线,AIGC产品的未来何去何从?

目录 腾讯元宝APP上线&#xff0c;AIGC产品的未来何去何从&#xff1f; 一、大模型AIGC产品概览 二、使用体验分享 1. 百度大脑 2. 阿里巴巴的AliMe 3. 字节跳动的TikTok AI 4. 腾讯元宝APP 小结 三、独特优势和倾向选择 1. 字节豆包 2. 百度文心一言 3. 阿里通义千…

【Jenkins】Jenkins - 节点

选择系统设置 - 节点设置 -添加节点 下载对应的 jar包 &#xff0c;执行命令 测试运行节点生效 1. 创建测试项目 test1 2. 选择节点执行&#xff1a; 在配置页面的“General”部分&#xff0c;找到“限制项目的运行节点”&#xff08;Restrict where this project can be run…

lubuntu / ubuntu 配置静态ip

一、查看原始网络配置信息 1、获取网卡名称 ifconfig 2、查询网关IP route -n 二、编辑配置文件 去/etc/netplan目录找到配置文件&#xff0c;配置文件名一般为01-network-manager-all.yaml sudo vim /etc/netplan/01-network-manager-all.yaml文件打开后内容如下 # This …

VScode的插件使用

1、正则插件-1 2、AI助手工具-1-fittentech 3、画图工具-1 4、GitHub的查看工具 5、shell测试工具 6、时序画图工具

实用的 C 盘搬家软件

一、简介 1、一款专门用于 Windows 系统的文件夹移动工具&#xff0c;它允许用户将程序或游戏的安装文件夹从一台驱动器移动到另一台驱动器&#xff0c;或者同一个驱动器内的不同路径&#xff0c;而无需重新安装或破坏现有的程序安装。 二、下载 1、下载地址&#xff1a; 官网链…

重新学习stm32(序)stm32简介

PS&#xff1a;最近毕设马上告一段落&#xff0c;在编写过程中发现自己的只是框架有很大问题&#xff0c;遂以此系列文章来整理知识架构。 STM32&#xff0c;其中的ST 代表的是意法半导体&#xff1b;M 是 Microelectronics 的缩写&#xff0c;即微控制器&#xff1b; 32 表示 …