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

Java 我应该使用什么结构来存储键和可能值的列表?,java,collections,Java,Collections,我想存储有关文件类型和可能的文件扩展名的信息。 我想做的是,如果我提供了文件扩展名,并且这个扩展名在列表中,我将返回它的密钥 例如: 对于字符串“jpg”,它返回我Filetype.IMAGE 我应该使用哪个集合?我的意思是,您现在也可以通过使用相同的结构映射来实现这一点。在Map中,任何值(包含“jpg”的字符串列表)都将返回Filetype.IMAGE,否则将返回Filetype.None extensionMapping.entrySet().stream().filter(entry-&

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

例如:

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


我应该使用哪个集合?

我的意思是,您现在也可以通过使用相同的结构
映射来实现这一点。在
Map
中,任何值(包含
“jpg”
的字符串列表)都将返回
Filetype.IMAGE
,否则将返回
Filetype.None

extensionMapping.entrySet().stream().filter(entry->entry.getValue().contains("jpg")).map(Map.Entry::getKey)
      .findFirst().orElse(Filetype.None);

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

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

似乎每个键的扩展都是唯一的,所以我选择
Map
,其中键是扩展。为什么不
Map
这是您最常见的查询?我觉得当前的一个也是很好的`Map是一个更好的容器,适用于键为单个
Enum
类型的情况。这可能是更好的答案。下面是一个类似问题的另一个帖子,其中映射通过
静态映射成为枚举的一部分
extensionMapping.entrySet().stream().filter(entry->entry.getValue().contains("jpg")).map(Map.Entry::getKey)
      .findFirst().orElse(Filetype.None);
Map<String, Filetype> byExtension = new HashMap<>();
extensionMapping.forEach((type, extensions) -> 
        extensions.forEach(ext -> byExtension.put(ext, type)));
FileType result = byExtension.get("jpg"); // FileType.IMAGE