列表工具-ListUtil
# 📚 介绍
ListUtil 是 Hutool 核心模块中的列表专用操作工具类,它提供了丰富的列表操作方法,包括列表创建、转换、操作、排序、查找和比较等功能,为 Java 开发者提供了便捷的列表操作解决方案。
# 设计理念
- 简化创建:提供多种方式创建列表
- 丰富操作:涵盖列表的各种常用操作
- 高效性能:底层实现经过优化,性能优异
- 易用性强:提供简洁的 API,一行代码即可完成复杂的列表操作
- 线程安全:所有工具类都是线程安全的,可以在多线程环境下安全使用
# 🔧 核心方法详解
# 1. 列表创建
# of(T... values)
功能:创建一个包含指定元素的列表
参数:
values:要包含在列表中的元素
返回值:包含指定元素的列表
示例:
// 创建包含指定元素的列表
List<String> list = ListUtil.of("a", "b", "c");
Console.log(list); // [a, b, c]
// 创建包含单个元素的列表
List<Integer> singleList = ListUtil.of(1);
Console.log(singleList); // [1]
// 创建空列表
List<String> emptyList = ListUtil.of();
Console.log(emptyList); // []
# split(String str, String separator)
功能:将字符串按指定分隔符分割为列表
参数:
str:要分割的字符串separator:分隔符
返回值:分割后的列表
示例:
// 分割字符串为列表
List<String> list = ListUtil.split("a,b,c", ",");
Console.log(list); // [a, b, c]
# zip(List<? extends K> keys, List<? extends V> values)
功能:将两个列表压缩为一个 Map
参数:
keys:键列表values:值列表
返回值:压缩后的 Map
示例:
List<String> keys = ListUtil.of("name", "age");
List<Object> values = ListUtil.of("Hutool", 7);
// 压缩为Map
Map<String, Object> map = ListUtil.zip(keys, values);
Console.log(map); // {name=Hutool, age=7}
# 2. 列表转换
# toList(Collection<? extends T> collection)
功能:将集合转换为列表
参数:
collection:要转换的集合
返回值:转换后的列表
示例:
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));
// 转换为列表
List<String> list = ListUtil.toList(set);
Console.log(list); // [a, b, c]
# toList(Iterator<? extends T> iterator)
功能:将迭代器转换为列表
参数:
iterator:要转换的迭代器
返回值:转换后的列表
示例:
Iterator<String> iterator = Arrays.asList("a", "b", "c").iterator();
// 转换为列表
List<String> list = ListUtil.toList(iterator);
Console.log(list); // [a, b, c]
# 3. 列表操作
# reverse(List list)
功能:反转列表中的元素顺序
参数:
list:要反转的列表
返回值:反转后的列表
示例:
List<String> list = ListUtil.of("a", "b", "c");
// 反转列表
List<String> reversedList = ListUtil.reverse(list);
Console.log(reversedList); // [c, b, a]
# sub(List list, int fromIndex, int toIndex)
功能:截取列表的指定部分
参数:
list:要截取的列表fromIndex:起始索引(包含)toIndex:结束索引(不包含)
返回值:截取后的列表
示例:
List<String> list = ListUtil.of("a", "b", "c", "d", "e");
// 截取列表
List<String> subList = ListUtil.sub(list, 1, 4);
Console.log(subList); // [b, c, d]
# removeNull(List list)
功能:移除列表中的 null 元素
参数:
list:要处理的列表
返回值:移除 null 后的列表
示例:
List<String> list = ListUtil.of("a", null, "b", null, "c");
// 移除null元素
List<String> nonNullList = ListUtil.removeNull(list);
Console.log(nonNullList); // [a, b, c]
# 4. 列表排序
# sort(List list)
功能:对列表进行自然排序
参数:
list:要排序的列表
返回值:排序后的列表
示例:
List<Integer> list = ListUtil.of(3, 1, 2);
// 自然排序
List<Integer> sortedList = ListUtil.sort(list);
Console.log(sortedList); // [1, 2, 3]
# sort(List list, Comparator<? super T> comparator)
功能:使用指定的比较器对列表进行排序
参数:
list:要排序的列表comparator:比较器
返回值:排序后的列表
示例:
List<String> list = ListUtil.of("c", "a", "b");
// 使用比较器排序
List<String> sortedList = ListUtil.sort(list, Comparator.reverseOrder());
Console.log(sortedList); // [c, b, a]
# 5. 列表查找
# indexOf(List list, T element)
功能:查找元素在列表中的索引
参数:
list:要查找的列表element:要查找的元素
返回值:元素在列表中的索引,如果不存在则返回 -1
示例:
List<String> list = ListUtil.of("a", "b", "c");
// 查找元素索引
int index = ListUtil.indexOf(list, "b");
Console.log(index); // 1
# lastIndexOf(List list, T element)
功能:查找元素在列表中最后一次出现的索引
参数:
list:要查找的列表element:要查找的元素
返回值:元素在列表中最后一次出现的索引,如果不存在则返回 -1
示例:
List<String> list = ListUtil.of("a", "b", "c", "b");
// 查找元素最后一次出现的索引
int lastIndex = ListUtil.lastIndexOf(list, "b");
Console.log(lastIndex); // 3
# 6. 列表比较
# equals(List<?> list1, List<?> list2)
功能:比较两个列表是否相等
参数:
list1:第一个列表list2:第二个列表
返回值:如果两个列表相等则返回 true,否则返回 false
示例:
List<String> list1 = ListUtil.of("a", "b", "c");
List<String> list2 = ListUtil.of("a", "b", "c");
List<String> list3 = ListUtil.of("a", "c", "b");
// 比较列表
boolean equals1 = ListUtil.equals(list1, list2);
boolean equals2 = ListUtil.equals(list1, list3);
Console.log(equals1); // true
Console.log(equals2); // false
# 🚀 综合示例
# 示例1:列表操作综合应用
public void listUtilTest() {
// 创建列表
List<String> list = ListUtil.of("a", "b", "c", "d", "e");
Console.log("原始列表:" + list); // 原始列表:[a, b, c, d, e]
// 反转列表
List<String> reversedList = ListUtil.reverse(list);
Console.log("反转后:" + reversedList); // 反转后:[e, d, c, b, a]
// 截取列表
List<String> subList = ListUtil.sub(list, 1, 4);
Console.log("截取后:" + subList); // 截取后:[b, c, d]
// 排序列表
List<String> sortedList = ListUtil.sort(list, Comparator.reverseOrder());
Console.log("排序后:" + sortedList); // 排序后:[e, d, c, b, a]
// 查找元素
int index = ListUtil.indexOf(list, "c");
Console.log("元素c的索引:" + index); // 元素c的索引:2
// 移除null元素
List<String> listWithNull = ListUtil.of("a", null, "b", null, "c");
List<String> nonNullList = ListUtil.removeNull(listWithNull);
Console.log("移除null后:" + nonNullList); // 移除null后:[a, b, c]
}
# 示例2:列表转换应用
public void listConvertTest() {
// 字符串分割为列表
List<String> splitList = ListUtil.split("1,2,3,4,5", ",");
Console.log("字符串分割:" + splitList); // 字符串分割:[1, 2, 3, 4, 5]
// 转换为整数列表
List<Integer> intList = splitList.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
Console.log("转换为整数列表:" + intList); // 转换为整数列表:[1, 2, 3, 4, 5]
// 两个列表压缩为Map
List<String> keys = ListUtil.of("name", "version", "author");
List<Object> values = ListUtil.of("Hutool", "v7", "Loolly");
Map<String, Object> map = ListUtil.zip(keys, values);
Console.log("列表压缩为Map:" + map); // 列表压缩为Map:{name=Hutool, version=v7, author=Loolly}
}
# 🎯 设计优势
- 简化创建:提供了多种便捷的列表创建方式,包括直接创建、字符串分割、列表压缩等
- 丰富操作:涵盖了列表的各种常用操作,包括转换、反转、截取、排序、查找等
- 高效性能:底层实现经过优化,性能优异,特别是对于大规模列表
- 易用性强:提供了简洁的 API,一行代码即可完成复杂的列表操作
- 线程安全:所有方法都是线程安全的,可以在多线程环境下安全使用
- 兼容性好:兼容 Java 各种版本,支持各种列表实现
# 📌 注意事项
- 空值处理:大部分方法都进行了空值处理,但在使用时仍需注意
- 列表类型:返回的列表类型可能因方法而异,使用时注意类型转换
- 性能考虑:对于大规模列表,某些操作可能会影响性能,建议根据实际情况选择合适的方法
- 线程安全:工具类本身是线程安全的,但列表对象的线程安全性取决于具体的列表实现
# 🚀 总结
ListUtil 是一个功能强大、使用便捷的列表操作工具类,为 Java 开发者提供了丰富的列表操作解决方案。它简化了列表的创建、转换、操作、排序、查找和比较等操作,提高了开发效率。
无论是简单的列表创建,还是复杂的列表操作,ListUtil 都能轻松应对。通过合理使用 ListUtil,可以简化列表操作的开发工作,提高开发效率,同时保证操作的准确性和性能。
ListUtil 是 Hutool 集合模块中的重要组成部分,与其他集合工具类一起,构成了完整的集合操作解决方案,为 Java 开发者提供了丰富的集合操作工具。