hutool中CollUtil工具类的常用方法

其实Java也自带集合工具类的,这个类就是Collections。

如果在Collections里面没找到想要使用的方法,可以在CollUtil再看看。

1、< T > ArrayList< T > newArrayList(T… values)

功能:获取一个新的ArrayList。

测试代码:

@Test
public void m1() {
    // 获取普通List
    List<Integer> list = CollUtil.newArrayList();
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(3);
    System.out.println(list); // [1, 2, 2, 3]

    // 还有一种方法获取新的ArrayList,也在开发中看到过
    // ArrayList<Integer> nList = Lists.newArrayList();
    // 这个是google-collections依赖中的,并不是hutool中的

    // 获取不可修改的集合
    Collection<Object> list1 = CollUtil.unmodifiable(new ArrayList<>());
    list1.add(1);
    //list1.set(0, 100);  // 报错
    Collection<Object> list2 = Collections.unmodifiableCollection(new ArrayList<>());
    list2.add("hello");
    //list2.set(0, "world");  // 报错
}

这里给个问题,也是我曾经想过:
为什么实际开发new 个ArrayList对象都要用工具类方法?
直接new ArrayList()不好吗?


2、< T > ArrayList< T > distinct(Collection collection)

功能:集合去重,不影响原集合数据。

测试代码:

@Test
public void m2() {
    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、boolean isNotEmpty(Collection<?> collection)
boolean isEmpty(Collection<?> collection)

功能:判断集合是否为空。

当集合不为null,但是没有元素时,也看做是空的。

测试代码:

@Test
public void m3() {
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
    List<Integer> list2 = new ArrayList<>();
    List<Integer> list3 = null;

    System.out.println(CollUtil.isNotEmpty(list1)); // true
    System.out.println(CollUtil.isEmpty(list2));    // true
    System.out.println(CollUtil.isEmpty(list3));    // true
}

4、boolean hasNull(Iterable<?> iterable)

功能:判断集合中是否含有null值的元素。

测试代码:

@Test
public void m4() {
    List<Integer> list1 = null;
    List<Integer> list2 = new ArrayList<>();
    List<Integer> list3 = Arrays.asList(1, 2, null);
    List<Integer> list4 = Arrays.asList(1, 2, 3);

    System.out.println(CollUtil.hasNull(list1));  // true
    System.out.println(CollUtil.hasNull(list2));  // false
    System.out.println(CollUtil.hasNull(list3));  // true
    System.out.println(CollUtil.hasNull(list4));  // false
    // list2为false,说明这个方法只检查集合中的元素
}

5、< T > Collection< T > intersection(Collection coll1, Collection coll2, …)

功能:求多个集合的交集。

测试代码:

@Test
public void m5() {
    List<Integer> list1 = Arrays.asList(1, 2, 3, 3);
    List<Integer> list2 = Arrays.asList(1, 2, 3, 3, 3, 4);
    List<Integer> list3 = Arrays.asList(5, 6);

    Collection<Integer> interList1 = CollUtil.intersection(list1, list2);
    Collection<Integer> interList2 = CollUtil.intersection(list2, list3);

    System.out.println(interList1); // [1, 2, 3, 3]
    System.out.println(interList2); // []
}

6、< T > Collection< T > union(Collection coll1, Collection coll2)

功能:求多个集合的并集。

测试代码:

@Test
public void m6() {
    List<Integer> list1 = Arrays.asList(1, 2, 3, 3);
    List<Integer> list2 = Arrays.asList(3, 4, 5, 6);

    Collection<Integer> unionList = CollUtil.union(list1, list2);
    System.out.println(unionList); // [1, 2, 3, 3, 4, 5, 6]
}

7、T min(Collection< T > coll),T max(Collection< T > coll)

功能:求集合中最小值,最大值。

测试代码:

@Test
public void m7() {
    List<Integer> list = Arrays.asList(1, 2, 3, 3);

    System.out.println(CollUtil.min(list));  // 1
    System.out.println(CollUtil.max(list));  // 3

    System.out.println(Collections.min(list));  // 1
    System.out.println(Collections.max(list));  // 3
}

8、List< T > reverse(List< T > list)
List< T > reverseNew(List< T > list)

功能:列表翻转,reverse直接改变原列表,reverseNew不改变原列表。

测试代码:

@Test
public void m8() {
    List<Integer> list = Arrays.asList(1, 2, 3, 3);

    CollUtil.reverse(list);     // 翻转,会改变原集合
    Collections.reverse(list);  // 翻转,会改变原集合

    System.out.println(list);  // [1, 2, 3, 3]

    List<Integer> list1 = CollUtil.reverseNew(list);  // 翻转,不改变原集合

    System.out.println(list);  // [1, 2, 3, 3]
    System.out.println(list1); // [3, 3, 2, 1]
}

9、T removeAny(T collection, E… elesRemoved)

功能:移除集合中所有这些值。

测试代码:

@Test
public void m9() {
    List<Integer> list = CollUtil.newArrayList(1,2,3,3);
    System.out.println(list); // [1, 2, 3, 3]

    List<Integer> list1 = CollUtil.removeAny(list, 3);
    System.out.println(list); // [1, 2]
}

10、List< T> sort(List< T> list, Comparator c)

功能:排序,需要指定比较器。

测试代码:

@Test
public void m10() {
    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]
}

11、List< String> sortByPinyin(List< String> list)

功能:按照拼音排序。

测试代码:

@Test
public void m11() {
    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)
}

另外:也可以使用 jdk8新特性 stream流式计算,功能也很强大。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐