java - 将 HashMap 从 Map<String, Boolean> 反转为 Map<Boolean, List<String>>

标签 java list dictionary arraylist hashmap

是否有更优雅/内置的方式来反转 Hashmap 的键和值?

我目前有以下内容。

private Map<Boolean, List<String>> reverseMap(Map<String, Boolean> permissions) {
    List<String> allow = new ArrayList<String>();
    List<String> deny = new ArrayList<String>();
    Map<Boolean, List<String>> returnvalue = new HashMap<Boolean, List<String>>();

    for (Entry<String, Boolean> entry : permissions.entrySet()) {
        if(entry.getValue()) {
            allow.add(entry.getKey());
        } else {
            deny.add(entry.getKey());
        }
    }

    returnvalue.put(true, allow);
    returnvalue.put(false, deny);
    return returnvalue;
}

最佳答案

您可以考虑使用 Guava 之一的 Multimap实现。例如:

private Multimap<Boolean, String> reverseMap(Map<String, Boolean> permissions) {
   Multimap<Boolean, String> multimap = ArrayListMultimap.create();
   for (Map.Entry<String, Boolean> entry : permissions.entrySet()) {
      multimap.put(entry.getValue(), entry.getKey());
   }
   return multimap;
}

或者更一般地说:

private static <K, V> Multimap<V, K> reverseMap(Map<K, V> source) {
   Multimap<V, K> multimap = ArrayListMultimap.create();
   for (Map.Entry<K, V> entry : source.entrySet()) {
      multimap.put(entry.getValue(), entry.getKey());
   }
   return multimap;
}

关于java - 将 HashMap 从 Map<String, Boolean> 反转为 Map<Boolean, List<String>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549640/

相关文章:

dictionary - ngx.shared.DICT 使用安全吗?

c# - 检查字典中是否有给定的字符串

python - 是否可以查找某个数字下的字典值的键?

java - 如何在同一台机器上运行数百个 Kafka 消费者?

java - 将组件粘贴到 JScrollPane 上

list - Haskell : Parse error in case statement (involving lists!)

python - 将列表列表转换为字符串列表

Java:复合对象的不变性

java - 值不打印(java)?

javascript - 从按对象标识符分组的列表中查找最小值/最大值