使用 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 方法进行检查。

isEmptyisNotEmpty

  • 时间复杂度: 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 是集合的大小。
  • 适用场景: 用于计算满足特定条件的元素数量。