将多个数组按指定元素(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即可…