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实现
前言 损失函数是用来评价模型的预测值和真实值一致程度,损失函数越小,通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段,如果我们想让预测值无限接近于真实值,就需要将损失值降到最低…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
