使用 CollectionUtils 类的常用方法
在Java开发中,我们经常需要对集合进行各种操作,而Apache Commons Collections库提供了一个方便的工具类 CollectionUtils
,其中包含了许多实用的方法。在这篇博客中,我们将深入了解一些常用的方法,并提供详细的示例。
1. isEmpty
// Check if a list is emptyList<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 emptyList<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 listint 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 listsList<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 listCollectionUtils.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 listsList<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 listsList<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 listsList<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 anotherCollectionUtils.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 conditionList<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 listList<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 conditionlong 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 是集合的大小。
- 适用场景: 用于计算满足特定条件的元素数量。