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 版权协议,转载请附上原文出处链接和本声明。