在Java中,如何从Hashmap中的值轻松获取密钥

在Java中,如何从Hashmap中的值轻松获取密钥,java,Java,在java中,我似乎找不到任何简单的方法从HashMap中的值中获取密钥。我发现我不理解或没有解释从值中获取密钥的实际过程,但它确实解释了要使用的工具。地图设计为具有快速密钥→值查找,但反之亦然 如果需要一个给定键的值,一个简单的解决方案是创建第二个具有反向映射的并行映射。你有两张地图,一张从A到B,另一张从B到A 或者,使用谷歌的,你可以使用一个,它支持双向查找 如果你真的想用一个普通的映射来实现这一点,你必须遍历所有的条目。可能有多个键具有相同的值,因此您需要对此进行说明 假设您有一个从Ke

在java中,我似乎找不到任何简单的方法从HashMap中的值中获取密钥。我发现我不理解或没有解释从值中获取密钥的实际过程,但它确实解释了要使用的工具。

地图设计为具有快速密钥→值查找,但反之亦然

  • 如果需要一个给定键的值,一个简单的解决方案是创建第二个具有反向映射的并行映射。你有两张地图,一张从A到B,另一张从B到A
  • 或者,使用谷歌的,你可以使用一个,它支持双向查找
  • 如果你真的想用一个普通的映射来实现这一点,你必须遍历所有的条目。可能有多个键具有相同的值,因此您需要对此进行说明

    假设您有一个从
    Key
    s到
    Value
    s的映射

    Map<Key, Value> map = ...;
    
    如果您知道始终存在一个且只有一个匹配值,那么这将非常有效。如果可以有多个密钥,则可以构建密钥集合

    Set<Key> keys = map.entrySet().stream()
        .filter(entry -> entry.getValue() == value)
        .map(entry -> entry.getKey())
        .collect(Collectors.toSet());
    
    Set keys=map.entrySet().stream()
    .filter(条目->条目.getValue()==value)
    .map(entry->entry.getKey())
    .collect(收集器.toSet());
    
    没有。HashMaps设计用于从键获取值,而不是相反。不过,也有缓慢的O(n)hacky方法。可能有许多键引用相同的值。您可以使用迭代器获取所有键和值。。。!还请注意,这些值可以重复。(不同的键可以具有相同的值)
    Set<Key> keys = map.entrySet().stream()
        .filter(entry -> entry.getValue() == value)
        .map(entry -> entry.getKey())
        .collect(Collectors.toSet());