Hutool Java工具类库-CollUtil(集合工具类)

本文介绍了HutoolJava工具包中常用的集合操作,包括创建各种类型的集合、去重方法(如distinct)、排序功能(如sort、sortByPinyin和sortPageAll),并提供了示例代码来展示这些功能的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一、依赖:

<!--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:IterableArrayList<T>新建一个ArrayList,
提供的参数为null时返回空ArrayList

newArrayList(Iterator<T> iterator)iterator:IteratorArrayList<T>新建一个ArrayList,
提供的参数为null时返回空ArrayList
newArrayList(Enumeration<T> enumeration)enumeration:EnumerationArrayList<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:容量
isLinked:是否为链表形式
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:集合,会被转换为ListList<T>根据汉字的拼音顺序排序
sortByPinyin(List<String> list)list:ListList<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:被排序的CollectionList<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);     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值