數據結構如下:
[{
"fileId": 436,
"fileName": "新建文件夾",
"fileSize": 0,
"fileUrl": "",
"fileCreateTime": 1562058941010,
"fileMd5": "",
"pid": 0,
"is_file": 1
}, {
"fileId": 623909,
"fileName": "hhhh.mp4",
"fileSize": 3359560,
"fileUrl": "http://files-storage.oss-cn-beijing.aliyuncs.com/4ca59c211185adc009378f50bc0bb029.mp4",
"fileCreateTime": 1561087643623,
"fileMd5": "4ca59c211185adc009378f50bc0bb029",
"pid": 0,
"is_file": 0
}, {
"fileId": 624079,
"fileName": "IMG_20190704_143444.jpg",
"fileSize": 1779713,
"fileUrl": "http://files-storage.oss-cn-beijing.aliyuncs.com/3ddfa908f70c4a1ede3339f67a54fdb8.jpg",
"fileCreateTime": 1562230327145,
"fileMd5": "3ddfa908f70c4a1ede3339f67a54fdb8",
"pid": 436,
"is_file": 0
}]
關於數據結構說明:
pid爲0,表示處於頂級;is_file爲1說明爲文件夾,0爲文件;
如果數據A的pid等於數據B的fileId,則說明A是B兒子;
如果數據A的pid等於數據B的pid,則說明A和B處於同一層級;
解析出來的樣式:
如果下載文件夾,則需要把文件夾下所有的子文件找出來,具體實現如下:
/**
* 傳入選中的文件、文件夾列表,
*
* @param allList 所有數據
* @param selectList 需要下載的數據
* @return 返回需要下載所有的文件列表
*/
public static List<CoursewareListItem> getAllFileList(List<CoursewareListItem> allList, List<CoursewareListItem> selectList) {
List<CoursewareListItem> resultList = new ArrayList<>();
Map<Long, CoursewareListItem> allMap = new LinkedHashMap<>();
List<Long> selectFileIdList = new ArrayList<>();
for (CoursewareListItem item : allList) {
allMap.put(item.getFileId(), item);
}
for (CoursewareListItem item : selectList) {
selectFileIdList.add(item.getFileId());
}
for (CoursewareListItem item : allMap.values()) {
CoursewareListItem tempItem = item;
if (tempItem.getIs_file() == 0) {
if (selectFileIdList.contains(item.getFileId())) {
resultList.add(item);
} else {
while (tempItem.getPid() != 0) {
CoursewareListItem listItem = allMap.get(tempItem.getPid());
if (listItem == null) {
break;
} else {
if (selectFileIdList.contains(listItem.getFileId())) {
resultList.add(item);
break;
} else {
tempItem = listItem;
}
}
}
}
}
}
return resultList;
}