最近有一个需求:后端对列表数据进行处理,让前端对数据进行折叠,代码如下:
1、Student类
用于列表数据展示
@Data
public class Student {
/**
* 主键
*/
private long id;
/**
* 姓名
*/
private String name;
/**
* 状态,1:正常,2:退学
*/
private Integer status;
}
2、实现折叠的代码(仅对当页有效)
private int getSkuCloseIndex(List<Student> students) {
// 为空 不折叠
if(CollectionUtils.isEmpty(students)){
return -1;
}
int lastStatus = students.get(students.size()-1).getStatus;
// 最后一个不是退学状态 不折叠
if(lastStatus != 2){
return -1;
}
boolean validateClosedFlag = true;
int closedIndex = 0;
List<Integer> statusIndexList = new LinkedList<>();
for (int i = students.size()-1; i >= 0 ; i --){
Student student = students.get(i);
if(student.getStatus == 2){
statusIndexList.add(i);
}
}
//退学学生数大于3,才开始折叠
if(statusIndexList.size() >= 3){
for(Integer i : statusIndexList){
for(int index=0;index<3;index++){
if(!statusIndexList.contains(i - index)){
validateClosedFlag = false;
break;
}
}
if(validateClosedFlag) {
closedIndex = i;
}
if(!validateClosedFlag){
break;
}
}
}
return closedIndex-1;
}