详细分析CollUtil的基本知识(附Demo)

news2024/9/30 8:56:40

目录

  • 前言
  • 1. 集合交并差
  • 2. CRUD
  • 3. 常用

前言

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

CollUtil 是一个工具类,通常用于集合的操作,提供了多种便捷的方法来处理集合,例如添加、删除、查找、转换等

1. 集合交并差

对应的API展示如下:

方法名说明示例
CollUtil.addAll(Collection<? super T> coll, T… elems)向集合中添加多个元素CollUtil.addAll(list, Arrays.asList(“元素1”, “元素2”));
CollUtil.isEmpty(Collection<?> coll)检查集合是否为空boolean isEmpty = CollUtil.isEmpty(list);
CollUtil.join(Collection<?> coll, String separator)将集合元素连接成字符串String result = CollUtil.join(list, ", ");
CollUtil.union(Collection<?> coll1, Collection<?> coll2)计算两个集合的并集(去重)Collection union = CollUtil.union(list1, list2);
CollUtil.unionDistinct(Collection<?> coll1, Collection<?> coll2)计算多个集合的并集,去重Collection unionDistinct = CollUtil.unionDistinct(list1, list2);
CollUtil.unionAll(Collection<?> coll1, Collection<?> coll2)计算多个集合的并集,不去重List unionAll = CollUtil.unionAll(list1, list2);
CollUtil.intersection(Collection<?> coll1, Collection<?> coll2)计算两个集合的交集Collection intersection = CollUtil.intersection(list1, list2);
CollUtil.intersection(Collection<?> coll1, Collection<?> coll2, Collection<?>… otherColls)计算多个集合的交集Collection intersectionMultiple = CollUtil.intersection(list1, list2, list3);
CollUtil.subtract(Collection<?> coll1, Collection<?> coll2)计算集合的差集Collection difference = CollUtil.subtract(list1, list2);
CollUtil.disjunction(Collection<?> coll1, Collection<?> coll2)计算两个集合的对称差集Collection disjunction = CollUtil.disjunction(list1, list2);
emptyIfNull(Set set)如果集合为空,返回一个空的不可变集合Set safeSet = emptyIfNull(nullSet);
emptyIfNull(List list)如果列表为空,返回一个空的不可变列表List safeList = emptyIfNull(nullList);
import cn.hutool.core.collection.CollUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import static cn.hutool.core.collection.CollUtil.emptyIfNull;

public class CollUtilDemo {
    public static void main(String[] args) {
        // 创建一个空的列表
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>(Arrays.asList("元素2", "元素2", "元素3", "元素4", "元素5"));

        // 1. 添加多个元素到集合中
        CollUtil.addAll(list1, Arrays.asList("元素1", "元素2")); // 使用 Arrays.asList
        System.out.println("添加元素后列表1: " + list1); // 输出: [元素1, 元素2]

        // 2. 检查集合是否为空
        boolean isEmpty = CollUtil.isEmpty(list1);
        System.out.println("列表1是否为空: " + isEmpty); // 输出: false

        // 3. 将集合元素连接成字符串
        String result = CollUtil.join(list1, ", ");
        System.out.println("连接后的字符串: " + result); // 输出: 元素1, 元素2

        // 4. 合并集合,得到并集
        Collection<String> union = CollUtil.union(list1, list2);
        System.out.println("并集: " + union); // 输出: [元素1, 元素2, 元素2, 元素3, 元素4, 元素5]

        // 5. 获取多个集合的并集(去重)
        Collection<String> unionDistinct = CollUtil.unionDistinct(list1, list2);
        System.out.println("并集(去重): " + unionDistinct); // 输出: [元素1, 元素2, 元素3, 元素4, 元素5]

        // 6. 不去重的并集
        List<String> unionAll = CollUtil.unionAll(list1, list2);
        System.out.println("不去重的并集: " + unionAll); // 输出: [元素1, 元素2, 元素2, 元素2, 元素3, 元素4, 元素5]

        // 7. 计算交集
        Collection<String> intersection = CollUtil.intersection(list1, list2);
        System.out.println("交集: " + intersection); // 输出: [元素2]

        // 8. 计算多个集合的交集
        List<String> list3 = new ArrayList<>(Arrays.asList("元素1", "元素3"));
        Collection<String> intersectionMultiple = CollUtil.intersection(list1, list2, list3);
        System.out.println("多个集合的交集: " + intersectionMultiple); // 输出: []

        // 9. 计算集合的差集
        Collection<String> difference = CollUtil.subtract(list1, list2);
        System.out.println("差集: " + difference); // 输出: [元素1]

        // 10. 计算两个集合的对称差(不在两个集合中的元素)
        Collection<String> disjunction = CollUtil.disjunction(list1, list2);
        System.out.println("对称差集: " + disjunction); // 输出: [元素1, 元素2, 元素3, 元素4, 元素5]

        // 11. 使用 emptyIfNull 方法检查集合是否为空
        List<String> nullList = null;
        List<String> safeList = emptyIfNull(nullList);
        System.out.println("空列表处理: " + safeList); // 输出: []
    }
}

截图如下:

在这里插入图片描述

2. CRUD

方法名说明示例
CollUtil.contains(Collection<?> collection, Object value)检查集合中是否包含指定元素boolean contains = CollUtil.contains(collection, “元素1”);
CollUtil.safeContains(Collection<?> collection, Object value)安全地检查集合中是否包含指定元素boolean safeContains = CollUtil.safeContains(collection, “元素4”);
CollUtil.contains(Collection collection, Predicate<? super T> containFunc)使用 Predicate 检查集合是否包含满足条件的元素boolean containsPredicate = CollUtil.contains(collection, elem -> elem.equals(“元素2”));
CollUtil.containsAny(Collection<?> coll1, Collection<?> coll2)检查两个集合是否有共同的元素boolean containsAny = CollUtil.containsAny(collection, otherCollection);
CollUtil.containsAll(Collection<?> coll1, Collection<?> coll2)检查一个集合是否包含另一个集合的所有元素boolean containsAll = CollUtil.containsAll(collection, Arrays.asList(“元素1”, “元素2”));
CollUtil.countMap(Iterable collection)计算集合中元素的出现次数Map<String, Integer> countMap = CollUtil.countMap(Arrays.asList(“元素1”, “元素2”, “元素1”, “元素3”));
CollUtil.join(Iterable iterable, CharSequence conjunction)将集合元素连接成字符串String joined = CollUtil.join(collection, ", ");
CollUtil.join(Iterable iterable, CharSequence conjunction, String prefix, String suffix)使用前后缀连接集合元素String joinedWithPrefixSuffix = CollUtil.join(collection, ", ", “[”, “]”);
CollUtil.popPart(Stack surplusAlaDatas, int partSize)从 Stack 中弹出部分元素List poppedStack = CollUtil.popPart(stack, 2);
CollUtil.popPart(Deque surplusAlaDatas, int partSize)从 Deque 中弹出部分元素List poppedDeque = CollUtil.popPart(deque, 2);
import cn.hutool.core.collection.CollUtil;

import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;

public class CollUtilExtendedDemo {
    public static void main(String[] args) {
        // 创建一个集合
        Collection<String> collection = new ArrayList<>(Arrays.asList("元素1", "元素2", "元素3"));

        // 1. 检查集合中是否包含指定元素
        boolean contains = CollUtil.contains(collection, "元素1");
        System.out.println("集合是否包含 '元素1': " + contains); // 输出: true

        // 2. 安全地检查集合中是否包含指定元素
        boolean safeContains = CollUtil.safeContains(collection, "元素4");
        System.out.println("集合是否安全地包含 '元素4': " + safeContains); // 输出: false

        // 3. 使用 Predicate 检查集合是否包含满足条件的元素
        boolean containsPredicate = CollUtil.contains(collection, elem -> elem.equals("元素2"));
        System.out.println("集合是否包含满足条件的元素 '元素2': " + containsPredicate); // 输出: true

        // 4. 检查两个集合是否有共同的元素
        Collection<String> otherCollection = Arrays.asList("元素3", "元素4");
        boolean containsAny = CollUtil.containsAny(collection, otherCollection);
        System.out.println("集合是否包含其他集合中的任何元素: " + containsAny); // 输出: true

        // 5. 检查一个集合是否包含另一个集合的所有元素
        boolean containsAll = CollUtil.containsAll(collection, Arrays.asList("元素1", "元素2"));
        System.out.println("集合是否包含所有指定元素: " + containsAll); // 输出: true

        // 6. 计算集合中元素的出现次数
        Map<String, Integer> countMap = CollUtil.countMap(Arrays.asList("元素1", "元素2", "元素1", "元素3", "元素2", "元素2"));
        System.out.println("元素出现次数: " + countMap); // 输出: {元素1=2, 元素2=3, 元素3=1}

        // 7. 连接集合元素成字符串
        String joined = CollUtil.join(collection, ", ");
        System.out.println("连接后的字符串: " + joined); // 输出: 元素1, 元素2, 元素3

        // 8. 使用前后缀连接集合元素
        String joinedWithPrefixSuffix = CollUtil.join(collection, ", ", "[", "]");
        System.out.println("带前后缀的连接字符串: " + joinedWithPrefixSuffix); // 输出: [元素1, 元素2, 元素3]

        // 9. 从 Stack 中弹出部分元素
        Stack<String> stack = new Stack<>();
        stack.push("元素A");
        stack.push("元素B");
        stack.push("元素C");
        List<String> poppedStack = CollUtil.popPart(stack, 2);
        System.out.println("从 Stack 弹出的元素: " + poppedStack); // 输出: [元素C, 元素B]
        System.out.println("Stack 剩余元素: " + stack); // 输出: [元素A]

        // 10. 从 Deque 中弹出部分元素
        Deque<String> deque = new LinkedList<>();
        deque.add("元素X");
        deque.add("元素Y");
        deque.add("元素Z");
        List<String> poppedDeque = CollUtil.popPart(deque, 2);
        System.out.println("从 Deque 弹出的元素: " + poppedDeque); // 输出: [元素Z, 元素Y]
        System.out.println("Deque 剩余元素: " + deque); // 输出: [元素X]
    }
}

截图如下:

在这里插入图片描述

对应删除的API如下:

方法名说明输出示例
removeNull(T collection)移除集合中的空值移除空值后的集合: [元素1, , 元素2, , 元素3, 元素4]
removeEmpty(T collection)移除集合中的空字符串移除空字符串后的集合: [元素1, 元素2, , 元素3, 元素4]
removeBlank(T collection)移除集合中的空白字符串移除空白字符串后的集合: [元素1, 元素2, 元素3, 元素4]
removeWithAddIf(T targetCollection, Predicate<? super E> predicate)根据条件移除元素并添加到目标集合移除包含’A’的元素后目标集合: [元素B, 元素C, 元素D]
移除的元素: [元素A]
extract(Iterable<?> collection, Editor editor)提取集合中的元素,并进行转换提取并转换后的集合: [元素1, , 元素2, null, , 元素3, 元素4]
import cn.hutool.core.collection.CollUtil;

import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class CollUtilDemo1 {
    public static void main(String[] args) {
        // 创建一个包含空值和空字符串的集合
        List<String> collection = new ArrayList<>(Arrays.asList("元素1", "", "元素2", null, " ", "元素3", "元素4"));

        // 1. 移除集合中的空值
        List<String> noNulls = CollUtil.removeNull(collection);
        System.out.println("移除空值后的集合: " + noNulls); // 输出: [元素1, , 元素2,  , 元素3, 元素4]

        // 2. 移除集合中的空字符串
        List<String> noEmptyStrings = CollUtil.removeEmpty(noNulls);
        System.out.println("移除空字符串后的集合: " + noEmptyStrings); // 输出: [元素1, 元素2,  , 元素3, 元素4]

        // 3. 移除集合中的空白字符串
        List<String> noBlankStrings = CollUtil.removeBlank(noEmptyStrings);
        System.out.println("移除空白字符串后的集合: " + noBlankStrings); // 输出: [元素1, 元素2, 元素3, 元素4]

        // 4. 根据条件移除元素并添加到目标集合
        List<String> targetCollection = new ArrayList<>(Arrays.asList("元素A", "元素B", "元素C", "元素D"));
        List<String> resultCollection = new ArrayList<>();
        CollUtil.removeWithAddIf(targetCollection, resultCollection, s -> s.contains("A"));
        System.out.println("移除包含'A'的元素后目标集合: " + targetCollection); // 输出: [元素B, 元素C, 元素D]
        System.out.println("移除的元素: " + resultCollection); // 输出: [元素A]

        // 5. 从集合中提取元素
        List<Object> extracted = CollUtil.extract(collection, obj -> obj.toString().toUpperCase());
        System.out.println("提取并转换后的集合: " + extracted); // 输出: [元素1, , 元素2, null,  , 元素3, 元素4]
    }

}

截图如下:

在这里插入图片描述

3. 常用

import cn.hutool.core.collection.CollUtil;
import java.util.ArrayList;
import java.util.List;

public class CollUtilTotalDemo {
    public static void main(String[] args) {
        // 1. 判断是否为空
        List<String> list1 = null;
        boolean isEmpty = CollUtil.isEmpty(list1); // true
        System.out.println("list1 为空: " + isEmpty);

        // 2. 判断是否非空
        List<String> list2 = new ArrayList<>();
        boolean isNotEmpty = CollUtil.isNotEmpty(list2); // false
        System.out.println("list2 非空: " + isNotEmpty);

        // 3. 集合是否包含某个元素
        List<String> list3 = CollUtil.newArrayList("a", "b", "c");
        boolean contains = CollUtil.contains(list3, "a"); // true
        System.out.println("list3 包含 'a': " + contains);

        // 4. 集合是否包含某些元素
        boolean containsAll = CollUtil.containsAll(list3, CollUtil.newArrayList("a", "b")); // true
        System.out.println("list3 包含 'a' 和 'b': " + containsAll);

        // 5. 两个集合的交集操作
        List<String> list4 = CollUtil.newArrayList("a", "b", "c");
        List<String> list5 = CollUtil.newArrayList("b", "c", "d");
        List<String> intersection = new ArrayList<>(CollUtil.intersection(list4, list5)); // ["b", "c"]
        System.out.println("list4 和 list5 的交集: " + intersection);

        // 6. 两个集合的并集操作
        List<String> union = new ArrayList<>(CollUtil.union(list4, list5)); // ["a", "b", "c", "d"]
        System.out.println("list4 和 list5 的并集: " + union);

        // 7. 两个集合的差集操作
        List<String> subtract = new ArrayList<>(CollUtil.subtract(list4, list5)); // ["a"]
        System.out.println("list4 和 list5 的差集: " + subtract);

        // 8. 集合转换为字符串,列表转为逗号分隔的字符串
        String join = CollUtil.join(list3, ", "); // "a, b, c"
        System.out.println("list3 转为字符串: " + join);
    }
}

截图如下:

在这里插入图片描述

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

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

相关文章

用友U8+CRM leadconversion.php SQL注入复现

0x01 产品描述&#xff1a; 用友U8-CRM是企业利用信息技术&#xff0c;是一项商业策略&#xff0c;它通过依据市场细分组织企业资源、培养以客户为中心的经营行为、执行以客户为中心的业务流程等手段来优化企业的客户满意度和获利能力。 0x02 漏洞描述&#xff1a; 用友 U8 CR…

<<迷雾>第5章 从逻辑学到逻辑电路(1)--继电器 示例电路

布尔代数可以用来解释复杂的开关电路 info::操作说明 鼠标单击开关切换开合状态 注: 开关不能全部都合上, 否则会导致模拟器异常 该异常与模拟器把开关和导线当作了零电阻的理想部件有关, 为避免此问题, 可在开关形成的回路上添加一个额外的电阻 另: 异常出现后, 右上方的运行按…

Nagle 算法:优化 TCP 网络中小数据包的传输

1. 前言 在网络通信中&#xff0c;TCP&#xff08;传输控制协议&#xff09;是最常用的协议之一&#xff0c;广泛应用于各种网络应用&#xff0c;如网页浏览、文件传输和在线游戏等。然而&#xff0c;随着互联网的普及&#xff0c;小数据包的频繁传输成为一个不容忽视的问题。…

行为设计模式 -策略设计模式- JAVA

策略设计模式 一 .简介二. 案例2.1 抽象策略&#xff08;Strategy&#xff09;类2.2 具体策略&#xff08;Concrete Strategy&#xff09;类2.3 环境&#xff08;Context&#xff09;类2.4 测试 三. 结论3.1 优缺点3.2 使用场景 前言 这是我在这个网站整理的笔记,有错误的地方请…

Git大框架总结

下面首先是我对于git的一个小总结&#xff0c;主要是大框架 首先是四区&#xff0c;因为大部分你所有的工作都是在这四个区里的实现的&#xff0c;包括要提交一个东西&#xff0c;是先是在工作区修改&#xff0c;后用add添加到暂存区&#xff0c;后提交到本地仓库&#xff0c;当…

文献阅读——电力系统安全域边界通用搜索模型与近似方法

文章标题 DOI&#xff1a;10.13334/j.0258-8013.pcsee.190884 ©2020 Chin.Soc.for Elec.Eng. 4411 文章编号&#xff1a;0258-8013 (2020) 14-4411-19 中图分类号&#xff1a;TM 74 电力系统安全域边界通用搜索模型与近似方法 姜涛&#xff0c;李晓辉&#xff0c;李雪*&a…

十五、存储过程与函数

文章目录 0. 引用1. 存储过程概述1.1 理解1.2 分类 2. 创建存储过程2.1 语法分析 3. 调用存储过程3.1 调用格式3.2 代码举例3.3 如何调试 4. 存储函数的使用4.1 语法分析4.2 调用存储函数4.3 代码举例4.4 对比存储函数和存储过程 5. 存储过程和函数的查看、修改、删除5.1 查看5…

建筑物变化检测算法baseline工程,开箱即用,23年5月测试准确度超越阿里云aiearth

建筑物变化检测算法baseline工程&#xff0c;开箱即用&#xff0c;23年5月测试准确度超越阿里云aiearth 建筑物变化检测算法Baseline工程 项目背景 随着城市化进程的加快&#xff0c;对建筑物的变化进行监测变得尤为重要。这不仅有助于城市管理与规划&#xff0c;还能够为灾害…

LeetCode 热题 100 回顾6

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

Kubernetes高级功能

资源配额 什么是资源配额 资源配额&#xff0c;通过 ResourceQuota 对象来定义&#xff0c;对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限&#xff0c;也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。 资源配额应用 创建的…

C语言中的日志机制:打造全面强大的日志系统

前言 在软件开发中&#xff0c;良好的日志记录机制对于调试、监控程序状态和维护系统的稳定性至关重要。本文将介绍如何在C语言中构建一个全面强大的日志系统&#xff0c;并提供一些示例代码。 1. 日志的基本概念 日志级别&#xff1a;用于分类日志信息的重要性&#xff0c;…

【Spring Boot 入门一】构建你的第一个Spring Boot应用

一、引言 在当今的软件开发领域&#xff0c;Java一直占据着重要的地位。而Spring Boot作为Spring框架的延伸&#xff0c;为Java开发者提供了一种更加便捷、高效的开发方式。它简化了Spring应用的搭建和配置过程&#xff0c;让开发者能够专注于业务逻辑的实现。无论是构建小型的…

齐次坐标的理解

齐次坐标是一种在计算机图形学、计算几何和机器人学中广泛使用的坐标表示方法。它通过引入额外的维度&#xff0c;将传统的欧几里得坐标转换为齐次坐标&#xff0c;从而简化一些数学运算&#xff0c;尤其是在变换&#xff08;如平移、旋转和缩放&#xff09;时。 齐次坐标的定…

基于SpringBoot实现QQ邮箱发送短信功能 | 免费短信服务

开发学习过程中有个短信发送功能&#xff0c;阿里云腾讯云等等都要money&#xff0c;听说qq邮箱可以实现免费发送邮箱的功能&#xff08;短信发送的平替&#xff09;&#xff0c;就用这个来实现&#xff01;&#xff01;&#xff01;【找了好多好多方法才成功的啊啊啊啊&#x…

【MySQL】查询原理 —— B+树查询数据全过程

使用B树作为索引结构的原因&#xff1a; 一种自平衡树&#xff1a; B树在插入和删除的时候节点会进行分裂和合并操作&#xff0c;以保持树的平衡&#xff0c;存在冗余节点&#xff0c;使得删除的时候树结构变化小&#xff0c;更高效。 高度不会增长过快&#xff0c;查询磁盘I…

[大语言模型-论文精读] 悉尼大学-ACL2024-提升大型语言模型的复杂视觉推理能力

[大语言模型-论文精读] 悉尼大学-ACL2024-提升大型语言模型的复杂视觉推理能力 目录 文章目录 [大语言模型-论文精读] 悉尼大学-ACL2024-提升大型语言模型的复杂视觉推理能力目录论文简介0. 摘要2. 相关工作2.1 视觉-语言领域的推理研究2.2 用于视觉-语言分析的大型语言模型 3 …

如何通过SNP Glue简化SAP数据迁移至云数据湖?

有一种更简单的方法可以将关键SAP数据导入云数据湖&#xff0c;而不需要长时间的不可靠数据加载。您还可以仅发送自上次采集后更新的数据&#xff0c;接近于实时地复制数据。我们的专家将向您介绍他们如何使用SNP Glue为我们的客户实现这一点&#xff0c;包括&#xff1a; ■ …

如何提取b站的视频字幕,下载视频

打开视频地址 按F12打开—开发者工具 在开发者工具打开Network 过滤器关键字&#xff1a; 自动生成字幕&#xff1a;ai_subtitle 自制&#xff1a;json 打开/关闭字幕 刷新页面 找到字幕 点选字幕的respond 将方框中的内容复制&#xff1b; 复制到&#xff1a;https://www.drea…

无人机视角垃圾检测数据集,26700余张无人机图像,超过4万标注信息,共3.6GB数据量,可用于环卫快速检查,垃圾快速定位等应用。

无人机视角垃圾检测&#xff0c;26700余张无人机图像&#xff0c;超过4万标注信息&#xff0c;共3.6GB数据量&#xff0c;可用于环卫快速检查&#xff0c;垃圾快速定位等应用。 名称 无人机视角垃圾检测数据集 规模 图像数量&#xff1a;26700余张标注信息&#xff1a;超过4…

Kafak入门技术详解

抱歉&#xff0c;没有太多的时间进行详细校对 目录 一、Kafka简介 1.消息队列 1.1为什么需要消息队列 1.2消息队列 1.3消息队列的分类 1.4P2P和发布订阅MQ的比较 1.5消息系统的使用场景 1.6常见的消息系统 2.Kafka简介 2.1简介 2.2设计目标 2.3 kafka核心的概念 二…