欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

咖啡汪日志——实际工作中好用的集合工具类(org.apache.commons.collections4.CollectionUtils)

程序员文章站 2022-04-02 10:47:16
判断list为空的情况:if(list == null || list.size() == 0){ }判断list不为空的情况:if(list != null && list.size()>0){ }...

本汪作为一名资深的哈士奇
每天除了闲逛,拆家,就是啃博客了
作为不是在戏精,就是在戏精的路上的二哈
今天就来给大家说说在实际工作中
collectionUtils 工具类正确使用姿势

一、collectionUtils推荐

org.apache.commons.collections4.CollectionUtils;

1、List集合判空


import org.apache.commons.collections4.CollectionUtils;

List<CouponTemplate> templates =
                templateDao.findAllByExpired(false);
        if (CollectionUtils.isEmpty(templates)) {
            log.info("Done To Expire CouponTemplate.");
            return;
        }
        if (CollectionUtils.isNotEmpty(expiredTemplates)) {
            log.info("Expired CouponTemplate Num: {}",
                    templateDao.saveAll(expiredTemplates));
        }


2、判断第一个list集合是否为第二个list集合的子集
判断 paramIds 是否为 curUsableIds 的子集

 List<Integer> curUsableIds = curUsableCoupons.stream().map(Coupon::getId).collect(Collectors.toList());
 List<Integer> paramIds = coupons.stream().map(Coupon::getId).collect(Collectors.toList());;
        if (CollectionUtils.isSubCollection(paramIds, curUsableIds)) {

        }


3、 数据库查询时 sql 中的 not in ,用 stream 流来实现(执行器记录表与执行器信息表不在一个数据库中)

获取当前可用的执行器 = 全部可用执行器 - 当前已使用用执行器
CollectionUtils.subtract(全集,子集),从全集中移除子集,

注意!集合中的元素,不可为对象类型引用,所以需要将对象转换为 String
进行集合的削减,再反序列化就好了。

/**
     * <h2>查询当前可用的执行器</h2>
     *
     * @return
     */
    @Override
    public List<SchedulerDto> getUsableScheduler() {

        //查询正在被使用的执行器信息从记录表中
        List<Cron> cronList = cronMapper.selectAllCronClassAndCronMethod();
        List<SchedulerDto> schedulerDtos = cronList.stream()
                .map(Cron::cron2SchedulerDto)
                .collect(Collectors.toList());

        //查询全部可用的执行器信息从执行器信息表中
        List<SchedulerDto> schedulerDtoList = schedulerMapper.selectAll();

        //无正在执行的,直接返回全部执行器
        if (CollectionUtils.isEmpty(schedulerDtos)) {
            return schedulerDtoList;
        }

        //无可用执行器,返回 null
        if (CollectionUtils.isEmpty(schedulerDtoList)) {
            return null;
        }

   //从全部可用执行器中移除正在使用的执行器,返回当前可用的执行器
        List<String> schedulerUsableStringList = schedulerDtos.stream()
                .map( c -> JSON.toJSONString(c))
                .collect(Collectors.toList());


        List<String> schedulerAllStringList = schedulerMapper.selectAll().stream()
                .map( c -> JSON.toJSONString(c))
                .collect(Collectors.toList());


        List<SchedulerDto> res = new LinkedList<>();

        if (CollectionUtils.isSubCollection(
       				 schedulerUsableStringList,
        			 schedulerAllStringList
        )) {
            Collection<String> collection = CollectionUtils.subtract(
		             schedulerAllStringList,
		             schedulerUsableStringList
            );
            collection.stream().forEach( s -> {
               res.add(JSON.parseObject(s,SchedulerDto.class));
            });
        }

        return res;
    }


二、MapUtils org.apache.commons.collections4.MapUtils;

Map集合判空

 Map<Integer, Coupon> id2Coupon = coupons.stream()
                .collect(Collectors.toMap(
                        Coupon::getId,
                        Function.identity()
                ));
        if (MapUtils.isEmpty(id2Coupon)) {
            
        }

持续更新中。。。
一如既往,希望本汪的应用技术,能够在工作中,对大家有所帮助。

						————  咖啡汪  2020.12.9  

本文地址:https://blog.csdn.net/weixin_42994251/article/details/107281957