集合工具 - CollUtil
# 集合工具 - CollUtil
简介
CollUtil
是 Hutool 提供的一个集合操作工具类,提供了丰富的集合操作方法,包括集合判空、排序、分页、子集提取等功能,简化了集合处理的工作流程。
# 1. join
方法
join
方法用于将集合中的元素连接成一个字符串。这个方法是 StrUtil.split
的反方法,支持各种类型的集合对象,连接时会调用每个对象的 toString()
方法。
# 示例:将集合转换为字符串
import cn.hutool.core.collection.CollUtil;
import java.util.List;
public class CollUtilExample {
public static void main(String[] args) {
// 创建一个集合
List<String> colList = CollUtil.newArrayList("a", "b", "c", "d", "e");
// 使用 join 方法将集合转换为带有分隔符的字符串
String result = CollUtil.join(colList, "#");
// 输出结果:a#b#c#d#e
System.out.println(result);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方法签名:
public static String join(Collection<?> collection, CharSequence delimiter)
1参数说明:
collection
:要进行连接的集合。delimiter
:分隔符,用于连接集合中的每个元素。
返回值:返回连接后的字符串。
实际开发场景:常用于将集合数据转换为可读性较高的字符串格式,如生成 CSV 数据、日志记录、拼接参数等。
# 2. sortPageAll
方法
sortPageAll
方法用于将多个集合合并到一个列表中,根据指定的比较器排序,并分页取出指定的数据,类似于数据库的多表查询后排序分页。
# 示例:合并、排序并分页获取集合数据
import cn.hutool.core.collection.CollUtil;
import java.util.Comparator;
import java.util.List;
public class CollUtilExample {
public static void main(String[] args) {
// 创建一个整数比较器
Comparator<Integer> comparator = Integer::compareTo;
// 创建多个列表
List<Integer> list1 = CollUtil.newArrayList(1, 2, 3);
List<Integer> list2 = CollUtil.newArrayList(4, 5, 6);
List<Integer> list3 = CollUtil.newArrayList(7, 8, 9);
// 合并、排序并分页获取数据
List<Integer> result = CollUtil.sortPageAll(0, 2, comparator, list1, list2, list3);
// 输出结果:[1, 2]
System.out.println(result);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
方法签名:
public static <T> List<T> sortPageAll(int start, int end, Comparator<T> comparator, Collection<T>... collections)
1参数说明:
start
:起始位置,包含该位置。end
:结束位置,不包含该位置。comparator
:比较器,用于排序。collections
:可变参数,表示多个集合。
返回值:返回排序并分页后的集合数据。
实际开发场景:在需要对多个集合数据进行统一排序并分页处理时,模拟数据库查询和分页的场景。
# 3. popPart
方法
popPart
方法用于从栈中弹出指定数量的元素,弹出后会从原栈中删除这些元素。
# 示例:从栈中弹出元素
import cn.hutool.core.collection.CollUtil;
import java.util.List;
import java.util.Stack;
public class CollUtilExample {
public static void main(String[] args) {
// 创建一个栈并填充数据
Stack<String> stack = CollUtil.newStack("a", "b", "c", "d");
// 弹出两个元素
List<String> poppedElements = CollUtil.popPart(stack, 2);
// 输出弹出的元素:[a, b]
System.out.println(poppedElements);
// 输出栈剩余元素:[c, d]
System.out.println(stack);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
方法签名:
public static <T> List<T> popPart(Stack<T> stack, int partSize)
1参数说明:
stack
:栈对象,类型为Stack<E>
。partSize
:要弹出的元素数量。
返回值:返回弹出的元素列表。
实际开发场景:适用于需要批量从栈中获取元素的场景,如实现撤销操作时的一步步回退。
# 4. append
方法
append
方法用于在数组末尾添加一个元素。内部使用了 System.arraycopy
,适用于少量元素的追加。
# 示例:在数组末尾追加元素
import cn.hutool.core.collection.CollUtil;
import java.util.Arrays;
public class CollUtilExample {
public static void main(String[] args) {
// 原始数组
String[] array = {"a", "b", "c"};
// 追加元素
String[] newArray = CollUtil.append(array, "d");
// 输出结果:[a, b, c, d]
System.out.println(Arrays.toString(newArray));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方法签名:
public static <T> T[] append(T[] array, T element)
1参数说明:
array
:原数组。element
:要添加的元素。
返回值:返回追加元素后的新数组。
实际开发场景:当需要在固定大小的数组中追加元素时,无需转换成集合后再操作。
# 5. resize
方法
resize
方法用于调整集合大小,若新大小比原来小则截断,若大则补空位。
# 示例:调整集合大小
import cn.hutool.core.collection.CollUtil;
import java.util.List;
public class CollUtilExample {
public static void main(String[] args) {
// 原始列表
List<String> list = CollUtil.newArrayList("a", "b", "c");
// 调整大小为 5
List<String> resizedList = CollUtil.resize(list, 5);
// 输出结果:[a, b, c, null, null]
System.out.println(resizedList);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方法签名:
public static <T> List<T> resize(List<T> list, int newSize)
1参数说明:
list
:要调整的集合。newSize
:调整后的大小。
返回值:返回调整后的新集合。
实际开发场景:用于动态调整集合大小的场景,如需要将数据裁剪到特定范围或预留位置给未来的数据。
# 6. addAll
方法
addAll
方法用于将多个元素添加到一个集合中。
# 示例:批量添加元素到集合
import cn.hutool.core.collection.CollUtil;
import java.util.List;
public class CollUtilExample {
public static void main(String[] args) {
// 创建目标集合
List<String> list = CollUtil.newArrayList("a");
// 批量添加元素
CollUtil.addAll(list, "b", "c", "d");
// 输出结果:[a, b, c, d]
System.out.println(list);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方法签名:
public static <T> boolean addAll(Collection<T> collection, T... elements)
1参数说明:
collection
:目标集合。elements
:要添加的元素。
返回值:返回添加是否成功的布尔值。
实际开发场景:适用于需要将多个元素批量添加到集合中的场景,如数据初始化、集合合并等。
# 7. sub
方法
sub
方法用于对集合进行切片操作,自动处理越界问题,避免 IndexOutOfBoundsException
异常。
# 示例:截取集合的子集
import cn.hutool.core.collection.CollUtil;
import java.util.List;
public class CollUtilExample {
public static void main(String[] args) {
// 创建集合
List<String> list = CollUtil.newArrayList("a", "b", "c", "d", "e");
// 截取集合中的一部分
List<String> subList = CollUtil.sub(list, 1, 3);
// 输出结果:[b, c]
System.out.println(subList);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方法签名:
public static <T> List<T> sub(List<T> list, int start, int end)
1参数说明:
list
:要切片的集合。start
:起始位置,包含该
位置。
end
:结束位置(不包含)。返回值:返回截取的子集合。
实际开发场景:在需要截取集合的一部分元素时,如分页显示、区间统计等操作。
# 8. isEmpty
和 isNotEmpty
方法
isEmpty
和 isNotEmpty
方法用于判断集合是否为空(包括 null
和无元素的集合)。
# 示例:判断集合是否为空
import cn.hutool.core.collection.CollUtil;
import java.util.List;
public class CollUtilExample {
public static void main(String[] args) {
// 创建一个空集合
List<String> list = CollUtil.newArrayList();
// 判断集合是否为空
boolean isEmpty = CollUtil.isEmpty(list);
boolean isNotEmpty = CollUtil.isNotEmpty(list);
// 输出结果:true false
System.out.println(isEmpty + " " + isNotEmpty);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
方法签名:
public static boolean isEmpty(Collection<?> collection) public static boolean isNotEmpty(Collection<?> collection)
1
2参数说明:
collection
:要判断的集合。
返回值:
true
表示集合为空或不为空。实际开发场景:在操作集合前进行空值判断,避免空指针异常或其他逻辑错误。
# 9. zip
方法
zip
方法用于将两个集合元素一一对应,组成一个 Map
。该方法的灵感来源于 Python 的 zip 函数。
# 示例:合并集合为 Map
import cn.hutool.core.collection.CollUtil;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class CollUtilExample {
public static void main(String[] args) {
// 创建键和值的集合
Collection<String> keys = CollUtil.newArrayList("a", "b", "c", "d");
Collection<Integer> values = CollUtil.newArrayList(1, 2, 3, 4);
// 合并集合为 Map
Map<String, Integer> map = CollUtil.zip(keys, values);
// 输出结果:{a=1, b=2, c=3, d=4}
System.out.println(map);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
方法签名:
public static <K, V> Map<K, V> zip(Collection<K> keys, Collection<V> values)
1参数说明:
keys
:键的集合。values
:值的集合。
返回值:返回由键和值组成的
Map
。实际开发场景:用于将两个集合对应合并成
Map
,适合在需要根据键值对进行数据映射的场景,如配置解析、动态数据结构生成等。