比如按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即可…