Android文件夾的下載,從數據源中找到所有的子文件的實現

數據結構如下:

[{
	"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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章