Какую структуру следует использовать для хранения ключа и списка возможных значений? - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу хранить информацию о типе файла и возможном расширении файла.Что я хочу сделать, если я предоставлю расширение файла, и это расширение находится в списке, я верну ключ для него.

Например:

Map<Filetype, List<String>> extensionMapping= new HashMap<>();
extensionMapping.put(Filetype.IMAGE, Arrays.asList("jpg", "jpeg"));
extensionMapping.put(Filetype.WORD, Arrays.asList("doc", "docx"));
extensionMapping.put(Filetype.EXCEL, Arrays.asList("xls", "xlsx", "xlsm"));
extensionMapping.put(Filetype.PPT, Arrays.asList("ppt", "pptx", "pptm"));`

И затем я хочу сделать что-то вродеthis:

return extensionMapping.get().contains("jpg");

который для строки "jpg" возвращает мне Filetype.IMAGE.

Какую коллекцию мне следует использовать?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Я бы создал обратную карту, ключами которой являются расширение, а значениями - тип файла:

Map<String, Filetype> byExtension = new HashMap<>();
extensionMapping.forEach((type, extensions) -> 
        extensions.forEach(ext -> byExtension.put(ext, type)));

Теперь для данного расширения вы просто делаете:

FileType result = byExtension.get("jpg"); // FileType.IMAGE
0 голосов
/ 12 февраля 2019

Я имею в виду, что вы можете сделать это сейчас, имея такую ​​же структуру Map<Filetype, List<String>>Map любое из значений (которое содержит список строк "jpg") вернет Filetype.IMAGE, иначе вернет Filetype.None

extensionMapping.entrySet().stream().filter(entry->entry.getValue().contains("jpg")).map(Map.Entry::getKey)
      .findFirst().orElse(Filetype.None);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...