java - N个哈希表的键之间进行UNION操作

标签 java hashmap

我有一个包含 N 个哈希表的哈希表:

Map<Integer,Map<String,Double>

我需要创建一个包含内部映射的所有键的列表:

----------------
|     | a    2 |
| 100 | b    1 |    
|     | c    2 |
----------------
|     | a    2 |
| 101 | d    2 |     
---------------- 
|     | a    2 |
| 102 | b    1 |    
|     | e    2 |
----------------

列表 = {a,b,c,d,e}

这是我当前的代码:

Set<String> keys= new HashSet<>();
    map1.entrySet().forEach(e -> {
        keys.addAll(e.getValue().keySet());
    });

map1 包含数千个条目。

这是最佳方法吗?有人知道更快的方法吗?

最佳答案

您可以尝试使用以下代码:

Map<String, Double> innerMap = new HashMap<>();
innerMap.put("a", 2d);
innerMap.put("b", 2d);
innerMap.put("c", 2d);

Map<String, Double> innerMap2 = new HashMap<>();
innerMap2.put("a", 2d);
innerMap2.put("d", 2d);
innerMap2.put("e", 2d);

Map<Integer, Map<String, Double>> map = new HashMap<>();
map.put(100, innerMap);
map.put(101, innerMap2);

Set<String> collect = map.values()
                         .stream()
                         .parallel()
                         .map(Map::keySet)
                         .flatMap(Collection::stream)
                         .collect(Collectors.toSet());
<小时/>

不幸的是,如果它对性能有显着影响,您将必须亲自尝试。

<小时/>

这意味着您正在使用Java 8。但当您使用方法 forEach() 时,我只是假设是这样。

<小时/>

编辑:
请留意D. Kovács的评论关于parallel()方法的使用:Details

关于java - N个哈希表的键之间进行UNION操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41222448/

相关文章:

OSGi 中 Java 类加载器的使用

java - 检测 JTextField 中的 Enter 键并在 actionperformed 中执行某些操作

java - 用 Java 实现 RTSP 媒体服务器

java - 基于 JSON 对象创建 HashMap

Java 多个值到映射中的一个键

java - 如何将 Class<后代> 传递到 Hashmap 中?

java - 运行java中收集推文的代码时出现异常

java - Hamcrest 条件匹配器?

java - HashMap 的键和值不是唯一的吗?

c - 这行 C 代码为 HashMap 实现做了什么?