倒车从地图℃的HashMap中,字符串,布尔值>以地图<布尔,列表与LT;弦乐>> [英] Reversing a HashMap from Map<String, Boolean> to Map<Boolean, List<String>>

查看:92
本文介绍了倒车从地图℃的HashMap中,字符串,布尔值>以地图<布尔,列表与LT;弦乐>>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有扭转HashMap的键和值更优雅/内置的方式?

目前,我有以下几点。

 私人地图<布尔,列表与LT;弦乐>> reverseMap(地图<字符串,布尔值>权限){
    清单<串GT;允许=新的ArrayList<串GT;();
    清单<串GT;否认=新的ArrayList<串GT;();
    地图<布尔,列表与LT;弦乐>>返回值=新的HashMap<布尔,列表与LT;弦乐>>();    对于(进入<字符串,布尔值>项:permissions.entrySet()){
        如果(entry.getValue()){
            allow.add(entry.getKey());
        }其他{
            deny.add(entry.getKey());
        }
    }    returnvalue.put(真,允许);
    returnvalue.put(假的,拒绝);
    返回返回值;
}


解决方案

您可能会考虑使用之一番石榴的<一个href=\"http://docs.guava-libraries.google$c$c.com/git/javadoc/com/google/common/collect/Multimap.html\"相对=nofollow> Multimap之 实现。例如:

 私人Multimap之&LT;布尔,字符串&GT; reverseMap(地图&LT;字符串,布尔值&gt;权限){
   Multimap之&LT;布尔,字符串&GT;多重映射= ArrayListMultimap.create();
   对于(Map.Entry的&LT;字符串,布尔值&GT;项:permissions.entrySet()){
      multimap.put(entry.getValue(),entry.getKey());
   }
   返回多重映射;
}

或更普遍的:

 私有静态&LT; K,V&GT; Multimap之&LT; V,K&GT; reverseMap(地图&LT; K,V&GT;源){
   Multimap之&LT; V,K&GT;多重映射= ArrayListMultimap.create();
   对于(Map.Entry的&LT; K,V&GT;项:source.entrySet()){
      multimap.put(entry.getValue(),entry.getKey());
   }
   返回多重映射;
}

Is there a more elegant/built-in way to reverse the keys and values of a Hashmap?

I currently have the following.

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;
}

解决方案

You might consider using one of Guava's Multimap implementations. For example:

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;
}

Or more generally:

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;
}

这篇关于倒车从地图℃的HashMap中,字符串,布尔值&GT;以地图&LT;布尔,列表与LT;弦乐&GT;&GT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆