CollectionUtils工具类常用方法小结

2023-10-23 23:58

本文主要是介绍CollectionUtils工具类常用方法小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

集合判断: 
  例1: 判断集合是否为空:
  CollectionUtils.isEmpty(null): true
  CollectionUtils.isEmpty(new ArrayList()): true  
  CollectionUtils.isEmpty({a,b}): false

  例2: 判断集合是否不为空:
  CollectionUtils.isNotEmpty(null): false
  CollectionUtils.isNotEmpty(new ArrayList()): false
  CollectionUtils.isNotEmpty({a,b}): true

 

CollectionUtils在真实项目中,是一个非常好用的工具类,使用非常频繁。它可以使代码更加简洁和安全。刚好在工作中利用这个工具类重构代码,顺便总结下分享分享:

并集
@Test
public void testUnion(){String[] arrayA = new String[] { "A", "B", "C", "D", "E", "F" };  String[] arrayB = new String[] { "B", "D", "F", "G", "H", "K" };List<String> listA = Arrays.asList(arrayA);List<String> listB = Arrays.asList(arrayB);//2个数组取并集 System.out.println(ArrayUtils.toString(CollectionUtils.union(listA, listB)));//[A, B, C, D, E, F, G, H, K]
}
交集
@Test
public void testIntersection(){String[] arrayA = new String[] { "A", "B", "C", "D", "E", "F" };  String[] arrayB = new String[] { "B", "D", "F", "G", "H", "K" };List<String> listA = Arrays.asList(arrayA);List<String> listB = Arrays.asList(arrayB);//2个数组取交集 System.out.println(ArrayUtils.toString(CollectionUtils.intersection(listA, listB)));//[B, D, F]}
交集的补集(析取)
@Test
public void testDisjunction(){String[] arrayA = new String[] { "A", "B", "C", "D", "E", "F" };  String[] arrayB = new String[] { "B", "D", "F", "G", "H", "K" };List<String> listA = Arrays.asList(arrayA);List<String> listB = Arrays.asList(arrayB);//2个数组取交集 的补集System.out.println(ArrayUtils.toString(CollectionUtils.disjunction(listA, listB)));//[A, C, E, G, H, K]
}
差集(扣除)
@Test
public void testSubtract(){String[] arrayA = new String[] { "A", "B", "C", "D", "E", "F" };  String[] arrayB = new String[] { "B", "D", "F", "G", "H", "K" };List<String> listA = Arrays.asList(arrayA);List<String> listB = Arrays.asList(arrayB);//arrayA扣除arrayBSystem.out.println(ArrayUtils.toString(CollectionUtils.subtract(listA, listB)));//[A, C, E]}
集合是否为空
@Test
public void testIsEmpty(){class Person{}class Girl extends Person{}List<Integer> first = new ArrayList<>();List<Integer> second = null;List<Person> boy = new ArrayList<>();//每个男孩心里都装着一个女孩boy.add(new Girl());//判断集合是否为空System.out.println(CollectionUtils.isEmpty(first));   //trueSystem.out.println(CollectionUtils.isEmpty(second));   //trueSystem.out.println(CollectionUtils.isEmpty(boy));   //false//判断集合是否不为空System.out.println(CollectionUtils.isNotEmpty(first));   //falseSystem.out.println(CollectionUtils.isNotEmpty(second));   //falseSystem.out.println(CollectionUtils.isNotEmpty(boy));   //true
}
集合是否相等
@Test
public void testIsEqual(){class Person{}class Girl extends Person{}List<Integer> first = new ArrayList<>();List<Integer> second = new ArrayList<>();first.add(1);first.add(2);second.add(2);second.add(1);Girl goldGirl = new Girl();List<Person> boy1 = new ArrayList<>();//每个男孩心里都装着一个女孩boy1.add(new Girl());List<Person> boy2 = new ArrayList<>();//每个男孩心里都装着一个女孩boy2.add(new Girl());//比较两集合值System.out.println(CollectionUtils.isEqualCollection(first,second));   //trueSystem.out.println(CollectionUtils.isEqualCollection(first,boy1));   //falseSystem.out.println(CollectionUtils.isEqualCollection(boy1,boy2));   //falseList<Person> boy3 = new ArrayList<>();//每个男孩心里都装着一个女孩boy3.add(goldGirl);List<Person> boy4 = new ArrayList<>();boy4.add(goldGirl);System.out.println(CollectionUtils.isEqualCollection(boy3,boy4));   //true
}
不可修改的集合

我们对c进行操作,s也同样获得了和c相同的内容,这样就可以避免其他人员修改这个s对象。有时候需要对它进行保护,避免返回结果被人修改。

@Test
public void testUnmodifiableCollection(){Collection<String> c = new ArrayList<>();Collection<String> s = CollectionUtils.unmodifiableCollection(c);c.add("boy");c.add("love");c.add("girl");//! s.add("have a error");System.out.println(s);
}

这篇关于CollectionUtils工具类常用方法小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271306

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window