2017-01-10 4 views
1

У меня есть данные, как в следующем логический формат:Java: Arrange и извлечения данных с помощью HashMap и список

FolderID-1 
    FileID-1 
    FileID-2  
FolderID-2 
    FileID-3 
    FileID-4 
    FileID-5 
    FileID-6  
FolderID-3 
    FileID-7 
    FileID-8 
    FileID-9 
    FileID-10 

У меня есть список FileID объекта, которые имеют FoldeID мне нужно обновить одно поле в этом списке и необходимость перейти к этому списку другим способом.

Мне нужно получить FileID объект на основе fileid & folderid в этом методе. Для достижения того же я знаю два способа
1 HashMap<folderid,List<FileID>> ИЛИ 2 HashMap<folderid, HashMap<fileid ,FileID>

Есть ли другой эффективный способ сделать то же самое? Спасибо, что посмотрели сюда.

+1

Я не уверен, если это соответствует вашей цели, но что, если вы создаете композиционный 'Key {folderID, FILEID}' и использовать его в качестве ключа HashMap с соответствующим значением файла? Просто обратите внимание на методы equals и hashCode класса Key –

+0

. В моем подходе будет уникальная папкаId и fileID Итак, я собираюсь сохранить в качестве ключа {folderID + fileID} (сумма обоих id) – mcacorner

+0

Да, в случае если ' folderId + fileID' является уникальным, это кажется идеальным сочетанием для ключа –

ответ

1

Привет, я прочитал ваш cmnt, вы можете продолжить строковый ключ (используя идентификатор файла и папки), который будет работать на вас. Но ваши данные имеют приятную логическую структуру. Идентификатор файла и идентификатор папки будут уникальными, а одна папка будет содержать файл с идентификатором файла. Итак, мой подход к решению этого цели полностью зависит от этой структуры.

Я создал два файла класса FileIdObj и FolderIdObj, которые содержат данные, которые автоматически сохраняют файл и папку.

public static void fileIdBasedOnFileIdAndFolderId(List<FileIdObj> fileList) 
    { 
     Map<Integer,FolderIdObj> folderIdMap=new HashMap<Integer,FolderIdObj>(); 
     Map<Integer,FileIdObj> fileIdMap=new HashMap<Integer,FileIdObj>(); 

     for(int i=0;i<fileList.size();i++) 
     { 
      FileIdObj file=fileList.get(i); 
      fileIdMap.put(file.getFileId(), file); 

      int folderId=file.getFolderId(); 
      FolderIdObj folder=new FolderIdObj(); 

      if(folderIdMap.containsKey(folderId)) 
      { 
       folder=folderIdMap.get(folderId); 
       folder.setEndFileId(file.getFileId()); 
      }else 
      { 
       folder.setFolderId(folderId); 
       folder.setStartFileId(file.getFileId()); 
       folder.setEndFileId(file.getFileId()); 
      } 

      folderIdMap.put(folderId, folder); 
     } 

     Set<Integer> set=folderIdMap.keySet(); 
     Iterator it=set.iterator(); 
     while(it.hasNext()) 
     { 
      FolderIdObj obj=folderIdMap.get(it.next()); 
      System.out.println("folder id: "+obj.getFolderId()+" start fileId: "+obj.getStartFileId()+ 
        " end fileId: "+obj.getEndFileId()); 
     } 

     System.out.println(); 
     System.out.println(); 

     set=fileIdMap.keySet(); 
     it=set.iterator(); 
     while(it.hasNext()) 
     { 
      FileIdObj obj=fileIdMap.get(it.next()); 
      System.out.println("file id: "+obj.getFileId()+" folder id:"+obj.getFolderId()); 
     } 
    } 

В списке аргументов содержится только файл. Подробнее см. Ниже.

public class FileIdObj { 

    private int folderId; 
    private int fileId; 

    public int getFolderId() { 
     return folderId; 
    } 
    public void setFolderId(int folderId) { 
     this.folderId = folderId; 
    } 
    public int getFileId() { 
     return fileId; 
    } 
    public void setFileId(int fileId) { 
     this.fileId = fileId; 
    } 

} 
public class FolderIdObj { 

    private int folderId; 
    private int startFileId; 
    private int endFileId; 

    public int getFolderId() { 
     return folderId; 
    } 
    public void setFolderId(int folderId) { 
     this.folderId = folderId; 
    } 
    public int getStartFileId() { 
     return startFileId; 
    } 
    public void setStartFileId(int startFileId) { 
     this.startFileId = startFileId; 
    } 
    public int getEndFileId() { 
     return endFileId; 
    } 
    public void setEndFileId(int endFileId) { 
     this.endFileId = endFileId; 
    } 

} 
Смежные вопросы