一、依赖:
<!--Hutool Java工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.5</version>
</dependency>
二、常用方法
1.新建集合
1.1 List
方法 | 参数 | 返回值 | 作用 | 备注 |
---|---|---|---|---|
newArrayList(Collection<T> collection) | collection:集合 | ArrayList<T> | 新建一个ArrayList | |
newArrayList(Iterable<T> iterable) | iterable:Iterable | ArrayList<T> | 新建一个ArrayList, 提供的参数为null时返回空ArrayList | |
newArrayList(Iterator<T> iterator) | iterator:Iterator | ArrayList<T> | 新建一个ArrayList, 提供的参数为null时返回空ArrayList | |
newArrayList(Enumeration<T> enumeration) | enumeration:Enumeration | ArrayList<T> | 新建一个ArrayList, 提供的参数为null时返回空ArrayList | |
newLinkedList(T... values) | values:数组 | LinkedList<T> | 新建LinkedList | |
newCopyOnWriteArrayList(Collection<T> collection) | collection:集合 | CopyOnWriteArrayList<T> | 新建一个CopyOnWriteArrayList |
1.2 Set
方法 | 参数 | 返回值 | 作用 | 备注 |
---|---|---|---|---|
newHashSet(Collection<T> collection) | collection:集合 | HashSet | 新建一个HashSet | |
newHashSet(boolean isSorted, Collection<T> collection) | isSorted:是否有序,有序返回 LinkedHashSet,否则返回HashSet collection:集合,用于初始化Set | HashSet | 新建一个HashSet | |
newHashSet(boolean isSorted, Iterator<T> iter) | isSorted:是否有序,有序返回 LinkedHashSet,否则返回HashSet iter:Iterator | HashSet | 新建一个HashSet | |
newHashSet(boolean isSorted, Enumeration<T> enumeration) | isSorted:是否有序,有序返回 LinkedHashSet,否则返回HashSet enumeration:Enumeration | HashSet | 新建一个HashSet | |
newLinkedHashSet(T... ts) | ts:元素数组 | HashSet | 新建一个HashSet |
1.3 BlockingQueue
方法 | 参数 | 返回值 | 作用 | 备注 |
---|---|---|---|---|
newBlockingQueue(int capacity, boolean isLinked) | capacity:容量 | BlockingQueue<T> | 新建BlockingQueue,在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。 |
1.4 Collection
方法 | 参数 | 返回值 | 作用 | 备注 |
---|---|---|---|---|
create(Class<?> collectionType) | collectionType:集合类型 | Collection<T> | 创建新的集合对象 | |
create(Class<?> collectionType, Class<T> elementType) | collectionType:集合类型,rawtype 如 ArrayList.class, EnumSet.class ... elementType:集合元素类型 | Collection<T> | 创建新的集合对象,返回具体的泛型集合 |
2.去重
方法 | 参数 | 返回值 | 作用 | 备注 |
---|---|---|---|---|
distinct(Collection<T> collection) | collection:集合 | ArrayList<T> | 去重集合 | |
distinct(Collection<T> collection, Function<T,K> uniqueGenerator, boolean override) | collection:集合 uniqueGenerator:唯一键生成器 override:是否覆盖模式,如果为true,加入的新值会覆盖相同key的旧值,否则会忽略新加值 | ArrayList<T> | 根据函数生成的KEY去重集合,如根据Bean的某个或者某些字段完成去重。 去重可选是保留最先加入的值还是后加入的值 |
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 2, 3, 4, 4, 4, 5);
ArrayList<Integer> list1 = CollUtil.distinct(list);
List<Integer> list2 = list.stream().distinct().collect(Collectors.toList());
System.out.println(list); // [1, 2, 2, 3, 4, 4, 4, 5]
System.out.println(list1); // [1, 2, 3, 4, 5]
System.out.println(list2); // [1, 2, 3, 4, 5]
}
3.排序
方法 | 参数 | 返回值 | 作用 | 备注 |
---|---|---|---|---|
sort(Collection<T> collection, Comparator<? super T> comparator) | collection:集合 comparator:比较器 | List<T> | 排序集合,排序不会修改原集合 | |
sort(List<T> list, Comparator<? super T> comparator) | List:被排序的List comparator:比较器 | List<T> | 针对List排序,排序会修改原List | |
sort(Map<K,V> map, Comparator<? super K> comparator) | map:Map comparator:Entry比较器 | TreeMap | 排序Map | |
sortByProperty(Collection<T> collection, String property) | collection:集合,会被转换为List property:属性名 | List<T> | 根据Bean的属性排序 | |
sortByProperty(List<T> list, String property) | list:List property:属性名 | List<T> | 根据Bean的属性排序 | |
sortByPinyin(Collection<String> collection) | collection:集合,会被转换为List | List<T> | 根据汉字的拼音顺序排序 | |
sortByPinyin(List<String> list) | list:List | List<T> | 根据汉字的拼音顺序排序 | |
sortToMap(Collection<Map.Entry<K,V>> entryCollection, Comparator<Map.Entry<K,V>> comparator) | entryCollection:Entry集合 comparator:Comparator | LinkedHashMap<K,V> | 通过Entry排序,可以按照键排序,也可以按照值排序,亦或者两者综合排序 | |
sortByEntry(Map<K,V> map, Comparator<Map.Entry<K,V>> comparator) | map:被排序的Map comparator:Comparator | LinkedHashMap<K,V> | 通过Entry排序,可以按照键排序,也可以按照值排序,亦或者两者综合排序 | |
sortEntryToList(Collection<Map.Entry<K,V>> collection) | collection:被排序的Collection | List<Map.Entry<K,V>> | 将Set排序(根据Entry的值) | |
sortPageAll(int pageNo, int pageSize, Comparator<T> comparator, Collection<T>... colls) | pageNo:页码,从0开始计数,0表示第一页 pageSize:每页的条目数 comparator:比较器 colls:集合数组 | List<T> | 将多个集合排序并显示不同的段落(分页) 采用BoundedPriorityQueue实现分页取局部 |
sort示例:
public static void main(String[] args) {
List<Integer> list = CollUtil.newArrayList(3,2,1,6,5,4);
List<Integer> list1 = CollUtil.newArrayList(3,2,1,6,5,4);
CollUtil.sort(list,Integer::compareTo);
System.out.println(list); // [1, 2, 3, 4, 5, 6]
Collections.sort(list1);
System.out.println(list1); // [1, 2, 3, 4, 5, 6]
}
sortByPinYin示例:
public static void main(String[] args) {
List<String> list = Arrays.asList("上海市","合肥市","南昌市");
List<String> list1 = Arrays.asList("上海市","合肥市","南昌市");
CollUtil.sortByPinyin(list);
System.out.println(list); // [合肥市, 南昌市, 上海市]
Collections.sort(list1, Collator.getInstance(Locale.CHINESE));
System.out.println(list1); // [合肥市, 南昌市, 上海市]
// 故拼音排序的底层实现就是有关:Collator.getInstance(Locale.CHINESE)
}
sortPageAll示例:
//新建三个列表,CollUtil.newArrayList方法表示新建ArrayList并填充元素
List<Integer> list1 = CollUtil.newArrayList(1, 2, 3);
List<Integer> list2 = CollUtil.newArrayList(4, 5, 6);
List<Integer> list3 = CollUtil.newArrayList(7, 8, 9);
//参数表示把list1,list2,list3合并并按照从小到大排序后,取0~2个(包括第0个,不包括第2个),结果是[1,2]
List<Integer> result = CollUtil.sortPageAll(0, 2, Comparator.naturalOrder(), list1, list2, list3);
//输出 [1,2]
System.out.println(result);