list集合的一些方法(分段截取,分页,排序)

list集合的一些方法(分段截取,分页,排序)

1、list分段截

/**
    * 截取list集合,返回list集合
    * @param tList  (需要截取的集合)
    * @param subNum  (每次截取的数量)
    * @return
    */
   public static<T>  List<List<T>> subList(List<T> tList, Integer subNum) {
      // 新的截取到的list集合
      List<List<T>> tNewList = new ArrayList<List<T>>();
      // 要截取的下标上限
      Integer priIndex = 0;
      // 要截取的下标下限
      Integer lastIndex = 0;
      // 每次插入list的数量
      // Integer subNum = 500;
      // 查询出来list的总数目
      Integer totalNum = tList.size();
      // 总共需要插入的次数
      Integer insertTimes = totalNum / subNum;
      List<T> subNewList = new ArrayList<T>();
      for (int i = 0; i <= insertTimes; i++) {
         // [0--20) [20 --40) [40---60) [60---80) [80---100)
         priIndex = subNum * i;
         lastIndex = priIndex + subNum;
         // 判断是否是最后一次
         if (i == insertTimes) {
            logger.info("最后一次截取:"+priIndex + "," + lastIndex);
            subNewList = tList.subList(priIndex, tList.size());
         } else {
            // 非最后一次
            subNewList = tList.subList(priIndex, lastIndex);

         }
         if (subNewList.size() > 0) {
            //logger.info("开始将截取的list放入新的list中");
            tNewList.add(subNewList);
         }

      }

      return tNewList;

   }

2、list分页处理

 //实现分页(默认开始无值结束有值,更多开始有值,结束无值)
    private List<NameValueDto> getPageNameValueDtos(MedicalCostCo medicalCostCo, List<NameValueDto<String, BigDecimal>> nameValueDtos) {
        int listSize = nameValueDtos.size();
        if (listSize==0){
            return  new ArrayList<>();
        }
        Integer rangeStart = medicalCostCo.getRangeStart()==null?1:medicalCostCo.getRangeStart();
        Integer rangeEnd = medicalCostCo.getRangeEnd()==null?listSize:medicalCostCo.getRangeEnd();
        if (rangeStart > rangeEnd) {
            throw new BusinessException("开始值不能大于结束值");
        }
        if (rangeStart <=0||rangeEnd<=0) {
            throw new BusinessException("开始值或结束值必须大于0");
        }
        if (rangeStart >listSize) {
            return  new ArrayList<>();
        }
        rangeEnd= Integer.min(rangeEnd,listSize);
        return new ArrayList<>(nameValueDtos.subList(rangeStart-1, rangeEnd));
    }

3、list实现排序(单个或多个值乘除)

//实现排序
    private void collectionsTwoValueSort(List<NameCostTimesDto> nameCostTimesDtos) {
        //实现排序
        Collections.sort(nameCostTimesDtos, new Comparator<NameCostTimesDto>() {
            @Override
            public int compare(NameCostTimesDto o1, NameCostTimesDto o2) {

                //compareTo结果是:   -1:小于;   0 :等于;   1 :大于;
                //-倒序 +正序
                BigDecimal v1 = o1.getPersonTimes().compareTo(0) == 0 ? new BigDecimal(0) : o1.getCost().divide(new BigDecimal(o1.getPersonTimes()), 4, RoundingMode.HALF_UP);
                BigDecimal v2 = o2.getPersonTimes().compareTo(0) == 0 ? new BigDecimal(0) : o2.getCost().divide(new BigDecimal(o2.getPersonTimes()), 4, RoundingMode.HALF_UP);
                return -v1.compareTo(v2);

            }
        });
    }

    //实现排序  List<NameValueDto> nameValueDtos
    private void collectionsOneValueSort(List<NameValueDto<String, BigDecimal>> nameValueDtos) {
        //实现排序
        Collections.sort(nameValueDtos, new Comparator<NameValueDto<String, BigDecimal>>() {
            @Override
            public int compare(NameValueDto<String, BigDecimal> o1, NameValueDto<String, BigDecimal> o2) {
                //compareTo结果是:   -1:小于;   0 :等于;   1 :大于;
                //-倒序 +正序
                return -o1.getValue().compareTo(o2.getValue());

            }
        });
    }
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值