java - 基于键列表获取子 HashMap 的最佳方法是什么?

标签 java hashmap

我有一个 HashMap,我想得到一个新的 HashMap,它只包含第一个 HashMap 中的元素,其中 K 属于特定列表。

我可以查看所有键并填充一个新的 HashMap,但我想知道是否有更有效的方法来做到这一点?

谢谢

最佳答案

有了 Java8 流,就有了一个功能性(优雅)的解决方案。如果 keys 是要保留的键列表,map 是源 Map

keys.stream()
    .filter(map::containsKey)
    .collect(Collectors.toMap(Function.identity(), map::get));

完整示例:

    List<Integer> keys = new ArrayList<>();
    keys.add(2);
    keys.add(3);
    keys.add(42); // this key is not in the map

    Map<Integer, String> map = new HashMap<>();
    map.put(1, "foo");
    map.put(2, "bar");
    map.put(3, "fizz");
    map.put(4, "buz");

    Map<Integer, String> res = keys.stream()
        .filter(map::containsKey)
        .collect(Collectors.toMap(Function.identity(), map::get));

    System.out.println(res.toString());

打印:{2=bar, 3=fizz}

编辑 为 map 中不存在的键添加一个过滤器

关于java - 基于键列表获取子 HashMap 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28856781/

相关文章:

Java Collection<Generic Type> 没有集合的排序

java - RDF 与其他数据集互连

Java 集合内存消耗

java - 当 keystore 文件通过 Web 应用程序动态更改时,无法正常工作 ssl 连接

java - 及时查找添加到 Guava LinkedHashMultimap/HashMultiMap 的第一个和最后一个元素

java - 使用android XmlPullParser解析XML文件的性能问题

java - 您将使用哪种数据结构 : TreeMap or HashMap? (Java)

java - 如果情况允许使用 HashMap,为什么有人会使用 Array 而不是 HashMap?

java - 有没有办法填充 HashMap 中的值以删除文本文件中的特定值?

java - Java HashMap 内部数据结构在重新散列过程中如何变化?