将多个集合按指定元素(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 objIdAndName = new ArrayList();
	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是value用来装filenames
	Map> map = new HashMap>();
	// 定义一个list集合用来装filenames
	List filenames = new ArrayList();
	// 遍历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 getFileNames = map.get(id);
			getFileNames.add(fileName);
			getFileNames.add(objectName);
			getFileNames.add(path);
			map.put(id, getFileNames);
		} else {
			// 如果没有此id为值的key,将filename放入一个新的list集合
			ArrayList list = new ArrayList();
			// filenames.clear();
			list.add(fileName);
			list.add(objectName);
			list.add(path);
			map.put(id, list);
		}
	}
	for (Entry> 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();
	}
}

运行结果为将多个集合按指定元素(ID)进行分类_第1张图片
只是一个demo,集合我这个是按数组来的,可以按照实际情况修改
初学者,学艺不精,很多可以优化的地方,望大家指点
比如flag那里的判断可以直接用contains,绕了一圈直接用contains即可…

你可能感兴趣的:(将多个集合按指定元素(ID)进行分类)