hutool中CollUtil工具类的常用方法

2,297 阅读3分钟

0、< T > Map< T > fieldValueMap(Listlist, "id")

功能:指定某个集合中的某个列作为键,列表数据作为值

测试代码:

@Override
public Map<Long, UserInfo> findByIds(List<Long> userIds, UserInfo info) {
    QueryWrapper qw = new QueryWrapper();
    //1、用户id列表
    qw.in("id", userIds);
    //2、添加筛选条件
    if (info != null) {
        if (info.getAge() != null) {
            qw.lt("age", info.getAge());
        }
        if (!StringUtils.isEmpty(info.getGender())) {
            qw.eq("gender", info.getGender());
        }
        if (!StringUtils.isEmpty(info.getNickname())) {
            qw.like("nickname", info.getNickname());
        }
    }
    List<UserInfo> list = userInfoMapper.selectList(qw);
    Map<Long, UserInfo> map = CollUtil.fieldValueMap(list, "id");
    return map;
}

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");  // 报错
}

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)
}

12、List< T > getFileValues(List< String > list , 集合某个字段 , 字段类型)

功能:取出集合某个字段的所有值进行返回

测试代码:

public PageResult findComments(String movementId, Integer page, Integer pagesize) {
    //1、调用API查询评论列表
    List<Comment> list = commentApi.findComments(movementId, CommentType.COMMENT, page, pagesize);
    //2、判断list集合是否存在
    if (CollUtil.isEmpty(list)) {
        return new PageResult();
    }
    //3、提取所有的用户id,调用UserInfoAPI查询用户详情
    List<Long> userIds = CollUtil.getFieldValues(list, "userId", Long.class);
    Map<Long, UserInfo> map = userInfoApi.findByIds(userIds, null);
    //4、构造vo对象
    List<CommentVo> vos = new ArrayList<>();
    for (Comment comment : list) {
        UserInfo userInfo = map.get(comment.getUserId());
        if (userInfo != null) {
            CommentVo vo = CommentVo.init(userInfo, comment);
            vos.add(vo);
        }
    }
    //5、构造返回值
    return new PageResult(page, pagesize, 0, vos);
}