我应该使用什么结构来存储键和可能值的列表?

时间:2019-02-12 20:14:58

标签: java collections

我想存储有关文件类型和可能的文件扩展名的信息。 我想做的是,如果我提供文件扩展名,并且此扩展名在列表中,我将为其返回密钥。

例如:

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"));`

然后我想做这样的事情:

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

对于字符串“ jpg”,它返回我Filetype.IMAGE

我应该使用哪个收藏集?

2 个答案:

答案 0 :(得分:2)

我将创建一个反向映射,键为扩展名,值为文件类型:

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

现在,对于给定的扩展名,您只需执行以下操作:

FileType result = byExtension.get("jpg"); // FileType.IMAGE

答案 1 :(得分:1)

我的意思是,您现在可以通过具有相同的结构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);