將多個集合按指定元素(ID)進行分類

將多個數組按指定元素(ID)進行分類

比如按ID分類
{1001,文件1,高空,路徑1},{1001,文件2,高空,路徑2},
{1002,文件3,地面,路徑3},{1002,文件4,地面,路徑4}
分類後得到
1001
文件1,天氣,路徑1,文件2,天氣,路徑2
1002
文件3,地面,路徑3,文件4,地面,路徑4

直接上代碼

public static void main(String[] args) {
	//id,文件名,屬性,路徑
	Object[] arr1 = { 1001, "文件1", "高空", "path1" };
	Object[] arr2 = { 1001, "文件2", "高空", "path2" };
	Object[] arr3 = { 1002, "文件3", "地面", "path3" };
	Object[] arr4 = { 1002, "文件4", "地面", "path4" };
	Object[] arr5 = { 1003, "文件5", "雷達", "path5" };
	Object[] arr6 = { 1003, "文件6", "雷達", "path6" };
	Object[] arr7 = { 1004, "文件7", "緯度", "path7" };
	Object[] arr8 = { 1004, "文件8", "緯度", "path8" };
	Object[] arr9 = { 1004, "文件9", "緯度", "path9" };
	Object[] arrq = { 1005, "文件10", "雨水", "path10" };
	Object[] arra = { 1006, "", "", "" };
	Object[] arrz = { 1007, "文件11", "風", "path11" };
	Object[] arrx = { 1007, "文件12", "風", "path12" };
	List<Object[]> objIdAndName = new ArrayList<Object[]>();
	objIdAndName.add(arr1);
	objIdAndName.add(arr2);
	objIdAndName.add(arr3);
	objIdAndName.add(arr4);
	objIdAndName.add(arr5);
	objIdAndName.add(arr6);
	objIdAndName.add(arr7);
	objIdAndName.add(arr8);
	objIdAndName.add(arr9);
	objIdAndName.add(arrq);
	objIdAndName.add(arra);
	objIdAndName.add(arrz);
	objIdAndName.add(arrx);
	// 定義一個map String是key用來裝id,List<String>是value用來裝filenames
	Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
	// 定義一個list集合用來裝filenames
	List<String> filenames = new ArrayList<String>();
	// 遍歷objIdAndName數組,取到所有的ID和filename進行分類
	for (int i = 0; i < objIdAndName.size(); i++) {
		int id = (Integer) objIdAndName.get(i)[0];
		String fileName = (String) objIdAndName.get(i)[1];
		String objectName = (String) objIdAndName.get(i)[2];
		String path = (String) objIdAndName.get(i)[3];
		Iterator keys = map.keySet().iterator();
		// 如果沒有key值
		if (!keys.hasNext()) {
			filenames.add(fileName);
			filenames.add(objectName);
			filenames.add(path);
			map.put(id, filenames);
			continue;
		}
		// 循環得到所有的key,判斷此id在map集合裏是否有此id爲值的key	
		boolean flag = false;
		// 如果存在 則flag = true
		while (keys.hasNext()) {
			int key = (Integer) keys.next();
			if (id == key) {
				flag = true;
			}
		}
		// 如果有此id爲值的key
		if (flag == true) {
			// 取出value,加上filenames後再次put到map集合
			List<String> getFileNames = map.get(id);
			getFileNames.add(fileName);
			getFileNames.add(objectName);
			getFileNames.add(path);
			map.put(id, getFileNames);
		} else {
			// 如果沒有此id爲值的key,將filename放入一個新的list集合
			ArrayList<String> list = new ArrayList<String>();
			// filenames.clear();
			list.add(fileName);
			list.add(objectName);
			list.add(path);
			map.put(id, list);
		}
	}
	for (Entry<Integer, List<String>> entry : map.entrySet()) {
		String[] arr = new String[entry.getValue().size()];
		System.out.println(entry.getKey());
		for (int i = 0; i < entry.getValue().size(); i++) {
			arr[i] = entry.getValue().get(i);
			System.out.print(arr[i]);
		}
		System.out.println();
	}
}

運行結果爲在這裏插入圖片描述 只是一個demo,集合我這個是按數組來的,可以按照實際情況修改 初學者,學藝不精,很多可以優化的地方,望大家指點 比如flag那裏的判斷可以直接用contains,繞了一圈直接用contains即可…