list集合的一些方法(分段截取,分页,排序)
1、list分段截
public static<T> List<List<T>> subList(List<T> tList, Integer subNum) {
List<List<T>> tNewList = new ArrayList<List<T>>();
Integer priIndex = 0;
Integer lastIndex = 0;
Integer totalNum = tList.size();
Integer insertTimes = totalNum / subNum;
List<T> subNewList = new ArrayList<T>();
for (int i = 0; i <= insertTimes; i++) {
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) {
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) {
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);
}
});
}
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) {
return -o1.getValue().compareTo(o2.getValue());
}
});
}