2013-09-09 4 views
-2

Я хотел бы изучить возможность использования HashMap для отслеживания изменений между файлами. Я использую несколько конфигурационных/текстовых файлов, чтобы дать набор документов статуса:HashMap из списка файлов

конфигурационный файл выглядит следующим образом:

STATUS1 = "Doc1.pdf, Doc2.xls, Doc5.doc" 
STATUS2 = "Doc8.pdf, Doc6.doc" 
STATUS3 = "Doc10.pdf" 
... 

Вместо того, чтобы создать отдельный HashMap для каждого экземпляра, как так:

Map<String, String> map1 = new HashMap<String, String>(); 
Map<String, String> map2 = new HashMap<String, String>(); 
Map<String, String> map3 = new HashMap<String, String>(); 

map1.put("STATUS1", "Doc1.pdf"); 
map2.put("STATUS1", "Doc2.xls"); 
map3.put("STATUS1", "Doc5.doc"); 

Я хочу иметь только одну карту с ключом статуса и значениями, сопоставленными с этим ключом.

Мне не нужна помощь при разборе файла, мне просто нужна помощь в реализации HashMap или Map, поэтому я могу добавить эту функциональность. Если есть другие типы данных или методы организации этих данных, я хотел бы услышать ваше мнение по этому поводу.

Любая помощь будет высоко оценена.

+0

Почему вы изобретаете diff? – Brian

+0

@Brian, я только пытаюсь реализовать некоторые функции, которые использует diff, однако мне нужен «статус», связанный с изменениями, и я не слишком хорошо знаком с diff. – Signus

ответ

3

Вы можете использовать MultiMap, который хранит несколько значений для одного и того же ключа.

  1. Multimap
Multimap<String, String> myMultimap = ArrayListMultimap.create(); 
    // Adding some key/value 

    myMultimap.put("STATUS1", "somePDF"); 
    myMultimap.put("STATUS1", "someDOC"); 
    myMultimap.put("STATUS1", "someXCL"); 
    myMultimap.put("STATUS2","someFormat"); 

    // Getting the size 
    int size = myMultimap.size(); 
    System.out.println(size); // 4 

    // Getting values 
    Collection<string> stats1 = myMultimap.get("STATUS1"); 
    System.out.println(stats1); // [somePDF, someDOC, someXCL] 

2. HashMap

With HashMap you can have something like, 

    List<String> listOfDocs = new ArrayList<String>(); 
    listOfDocs.add("somePDF"); 
    listOfDocs.add("someDOC"); 
    listOfDocs.add("someFormat"); 

    HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>(); 
    // key would be your STATUS 
    // Values would be ListOfDocs you need. 

    map.put("STATUS1", listOfDocs); 
    map.put("STATUS2", listOfDocs2); 
    map.put("STATUS3", listOfDocs3); 

Надеется, что это помогает. Сообщите мне, если у вас есть вопросы.

+0

Предполагаю, что вы используете библиотеку Google Collections вместо коллекции Apache, правильно? – Signus

+1

@Signus для использования MultiMap да. – JNL

+1

Удивительный. Отличная реализация. Примечание для всех, кто использует Apache Commons - используйте «MultiMap [name] = new MultiValueMap ();» – Signus