CollectionUtils
使用 CollectionUtils 类的常用方法
在Java开发中,我们经常需要对集合进行各种操作,而Apache Commons Collections库提供了一个方便的工具类 CollectionUtils,其中包含了许多实用的方法。在这篇博客中,我们将深入了解一些常用的方法,并提供详细的示例。
1. isEmpty
// Check if a list is empty
List<String> emptyList = new ArrayList<>();
boolean isEmpty = CollectionUtils.isEmpty(emptyList);
System.out.println("Is the list empty? " + isEmpty);//Is the list empty? true
这个方法用于检查给定的集合是否为空。在上面的例子中,我们创建了一个空的 ArrayList,然后使用 isEmpty 方法检查它是否为空,最后打印结果。
2. isNotEmpty
// Check if a list is not empty
List<String> nonEmptyList = Arrays.asList("item1", "item2");
boolean isNotEmpty = CollectionUtils.isNotEmpty(nonEmptyList);
System.out.println("Is the list not empty? " + isNotEmpty);//Is the list empty? true
与 isEmpty 相反,isNotEmpty 方法用于检查集合是否不为空。我们创建了一个包含一些元素的列表,并使用 isNotEmpty 方法进行检查。
isEmpty和isNotEmpty
- 时间复杂度: O(1) - 常数时间。这是因为这两个方法只需检查集合是否为
null或其大小是否为零。- 适用场景: 用于快速检查集合是否为空。
3. size
// Get the size of a list
int size = CollectionUtils.size(nonEmptyList);
System.out.println("Size of the list: " + size);//Size of the list: 2
size 方法返回给定集合的大小。在这个例子中,我们获取了之前非空列表的大小并打印输出。
size
- 时间复杂度: O(1) - 常数时间。这是因为
size方法通常由集合实现提供,直接返回已存储的大小。- 适用场景: 适用于快速获取集合的大小。
4. addAll
// Merge two lists
List<String> destinationList = new ArrayList<>();
CollectionUtils.addAll(destinationList, "item3", "item4");
System.out.println("Merged list: " + destinationList);//Merged list: [item3, item4]
addAll 方法用于将一个集合的所有元素添加到另一个集合中。在这里,我们创建了一个目标列表,并使用 addAll 将两个元素添加到这个列表中。
addAll
- 时间复杂度: O(n) - 线性时间,其中 n 是要添加的元素数量。
- 适用场景: 用于将一个集合的所有元素添加到另一个集合。在元素数量较大时可能会影响性能。
5. removeAll
// Remove elements from a list
CollectionUtils.removeAll(destinationList, "item3");
System.out.println("List after removal: " + destinationList);//List after removal: []
removeAll 方法用于从集合中移除指定的元素。在这个例子中,我们从目标列表中移除了一个元素,并打印输出修改后的列表。
removeAll
- 时间复杂度: O(n) - 线性时间,其中 n 是要移除的元素数量。
- 适用场景: 用于从集合中移除指定的元素。
6. intersection
// Get the intersection of two lists
List<String> list1 = Arrays.asList("apple", "orange", "banana");
List<String> list2 = Arrays.asList("banana", "kiwi", "apple");
List<String> intersection = (List<String>) CollectionUtils.intersection(list1, list2);
System.out.println("Intersection of lists: " + intersection);//Intersection of lists: [banana, apple]
intersection 方法返回两个集合的交集。在这里,我们创建了两个包含水果的列表,并使用 intersection 方法获取它们的交集。
7. union
// Get the union of two lists
List<String> union = (List<String>) CollectionUtils.union(list1, list2);
System.out.println("Union of lists: " + union);//Union of lists: [apple, orange, banana, kiwi]
union 方法返回两个集合的并集。在这个例子中,我们使用 union 方法获取两个水果列表的并集。
8. disjunction
// Get the disjunction of two lists
List<String> disjunction = (List<String>) CollectionUtils.disjunction(list1, list2);
System.out.println("Disjunction of lists: " + disjunction);//Disjunction of lists: [orange, kiwi]
disjunction 方法返回两个集合的互斥集合,即不属于交集的部分。在这里,我们使用 disjunction 方法获取两个列表的互斥部分。
9. subtract
// Subtract one list from another
CollectionUtils.subtract(list1, list2);
System.out.println("List1 after subtracting list2: " + list1);//List1 after subtracting list2: [orange]
subtract 方法用于从第一个集合中移除第二个集合中包含的元素。在这个例子中,我们使用 subtract 方法从 list1 中移除了与 list2 重叠的元素。
subtract
- 时间复杂度: O(m + n) - 线性时间,其中 m 和 n 分别是两个集合的大小。
- 适用场景: 用于从一个集合中移除另一个集合包含的元素。
10. filter
// Filter elements based on a condition
List<String> filteredList = (List<String>) CollectionUtils.select(list1, s -> s.startsWith("a"));
System.out.println("Filtered list: " + filteredList);//Filtered list: [apple]
filter 方法根据给定的条件保留集合中的元素。在这里,我们使用 filter 方法保留了以字母 “a” 开头的元素。
filter
- 时间复杂度: O(n) - 线性时间,其中 n 是集合的大小。
- 适用场景: 用于根据条件筛选集合中的元素。
11. transform
// Transform elements in a list
List<Integer> lengths = (List<Integer>) CollectionUtils.collect(list1, String::length);
System.out.println("Lengths of items in the list: " + lengths);//Lengths of items in the list: [5, 6, 6]
transform 方法用于对集合中的元素进行转换。在这个例子中,我们使用 transform 方法获取了 list1 中每个字符串元素的长度,并将结果存储在 lengths 列表中。
transform
- 时间复杂度: O(n) - 线性时间,其中 n 是集合的大小。
- 适用场景: 用于对集合中的元素进行转换。
12. countMatches
// Count elements that match a condition
long count = CollectionUtils.countMatches(list1, s -> s.length() > 5);
System.out.println("Number of items with length > 5: " + count);//Number of items with length > 5: 2
countMatches 方法用于计算满足特定条件的元素数量。在这个例子中,我们计算了 list1 中长度大于 5 的元素的数量。
countMatches
- 时间复杂度: O(n) - 线性时间,其中 n 是集合的大小。
- 适用场景: 用于计算满足特定条件的元素数量。
相关文章:
CollectionUtils
使用 CollectionUtils 类的常用方法 在Java开发中,我们经常需要对集合进行各种操作,而Apache Commons Collections库提供了一个方便的工具类 CollectionUtils,其中包含了许多实用的方法。在这篇博客中,我们将深入了解一些常用的方…...
很想写一个框架,比如,spring
很想写一个框架,比如,spring。 原理很清楚,源码也很熟悉。 可惜力不从心,是不是可以找几个小弟一起做。...
Java集合/泛型篇----第五篇
系列文章目录 文章目录 系列文章目录前言一、说说LinkHashSet( HashSet+LinkedHashMap)二、HashMap(数组+链表+红黑树)三、说说ConcurrentHashMap前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通…...
ACES 增强版不丹水稻作物地图(2016-2022 年)
ACES 增强版不丹水稻作物地图(2016-2022 年) 用于改善粮食安全决策的 2016-2022 年年度作物类型稻米地图仍然是不丹的一项挑战。这些地图是与不丹农业部和 SERVIR 合作开发的。通过专注于发展不丹的科学、技术、工程和数学 (STEM),我们共同开…...
【Spark精讲】一文讲透Spark宽窄依赖的区别
宽依赖窄依赖的区别 窄依赖:RDD 之间分区是一一对应的宽依赖:发生shuffle,多对多的关系 宽依赖是子RDD的一个分区依赖了父RDD的多个分区父RDD的一个分区的数据,分别流入到子RDD的不同分区特例:cartesian算子对应的Car…...
nacos2.3.0配置中心问题处理
问题:Error to process server push response: {"headers":{},"abilityTable":{"supportPersistentInstanceByGrpc":true},"module":"internal"} 处理办法: 将pom.xml中 <!-- nacos服务注册/发…...
Apollo自动驾驶系统:实现城市可持续交通的迈向
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言引言:1. 什么是微服务架构?2. 微服务架构的组成要素3. 微服务架构的挑战和解决方案4. 微服务架构的可扩展性和弹性 第二部分&#x…...
【WPF.NET开发】附加事件
本文内容 先决条件附加事件语法WPF 如何实现附加事件附加事件方案处理附加事件定义自定义附加事件引发 WPF 附加事件 Extensible Application Markup Language (XAML) 定义了一种语言组件和称为附加事件的事件类型。 附加事件可用于在非元素类中定义新的 路由事件,…...
java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队
背景 近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到 人在地铁上,bug从咚咚来~ 没有任何修改的服务接口,抛出…...
【pynput】鼠标行为追踪并模拟
文章目录 前言基本思路安装依赖包实时鼠标捕获捕获鼠标位置捕获鼠标事件记录点击内容效果图 实时按键捕获控制按键操作捕获按键事件组合键记录区间设置 用户操作记录与回溯基本思路完整代码效果图 利用本文内容从事的任何犯法行为和开发与本人无关,请理性利用技术服…...
docker小白第十天
redis集群主从容错切换案例 3主3从的redis集群,某个主机宕机了,需要对应的从机补位。 docker exec -it redis-node-1 /bin/bash # 进入容器1的命令行 redis-cli -p 6381 # 进入节点1的命令行 cluster nodes # 查看集群信息可以看到1号和6号对应是主从关…...
Apache SSI 远程命令执行漏洞
一、环境搭建 二、访问upload.php 三、写shell <!--#exec cmd"id" --> 四、访问 如图所示,即getshell成功!...
阿里云30个公共云地域、89个可用区、5个金融云和政务云地域
阿里云基础设施目前已面向全球四大洲,公共云地域开服运营30个公共云地域、89个可用区,此外还拥有5个金融云、政务云地域,并且致力于持续的新地域规划和建设,从而更好的满足用户多样化的业务和场景需求。伴随着基础设施的加速投入和…...
Linux驱动开发之杂项设备注册和Linux2.6设备注册
目录 一、杂项设备注册 杂项设备注册简介 杂项设备注册特点: 杂项设备注册相关API misc_register() misc_deregister() 杂项设备注册相关例程 例程简介 源码分享 二、Linux 2.6设备注册 Linux2.6设备注册简介 Linux 2.6设备注册特点 Linux2.6设备注册流程 Linu…...
javafx写一个文档编辑器
文本编辑器是一种用于编辑纯文本文件的工具。它具有基本的文本编辑功能,如插入、删除、复制、粘贴等。文本编辑器通常不具备格式化文本、排版和图形编辑等高级功能,专注于纯文本的编辑。常见的文本编辑器包括记事本(Notepad)、Sublime Text、Visual Studio Code、Atom、Emacs…...
PHP与Angular详细对比 帮助你选择合适的项目技术
开发可有效扩展并提供诺克斯堡级安全性的Web应用程序和网站是每个开发人员的梦想。而使用这样的产品是每个用户的愿望。因此,为您的项目选择最合适和可靠的技术非常关键。 虽然PHP和Angular是完全不同的技术——PHP与JavaScript是一个更恰当的比较——但它们都广泛…...
基于立锜RTQ7882,支持全协议及DP显示功能的PD快充方案
在上一篇文章【基于RTQ7882的车载PD快充方案 - 大大通 (wpgdadatong.com)】中,已经对立锜科技(Richtek)及主打产品RTQ7882的基本功能作了介绍。 本文将分享RTQ7882近期新增的功能,以及其Cost Down版本。 旨…...
2023-12-25 LeetCode每日一题(不浪费原料的汉堡制作方案)
2023-12-25每日一题 一、题目编号 1276. 不浪费原料的汉堡制作方案二、题目链接 点击跳转到题目位置 三、题目描述 圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices …...
JavaScript 基础通关
快速熟悉 JavaScript 的基础语法,比较高级的比如事件放在后面的笔记中。 JavaScript 1. JavaScript 介绍 1.1 JavaScript 基本介绍 JavaScript 是一门运行在客户端(浏览器)的编程语言,实现人机交互的效果。实现网页特效、表单验…...
目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现
前言 损失函数是用来评价模型的预测值和真实值一致程度,损失函数越小,通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段,如果我们想让预测值无限接近于真实值,就需要将损失值降到最低…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
