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

  • Post author:
  • Post category:其他




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());

            }
        });
    }



版权声明:本文为weixin_45245297原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。