Java 8 检查其键的 HashMap 是否与包含键的列表相等,并返回它们相等的 HashMap 值

标签 java list java-8 hashmap java-stream

我想用 Java 8 遍历 HashMap ,将其键与给定列表(包含具有键 ID 的对象)进行比较,并返回 HashMap 中的值,其中 HashMap 的键和对象的键列表是相等的。我想不通。

我尝试完成这样的事情:

someHashMap.entrySet()
    .stream()
    .filter(entry -> entry.getValue().equals(something.stream().iterator().next().getID()))
    .map(map -> map.getValue())
    .collect(Collectors.toList());

最佳答案

如果您初始化了这些对象:

Map<K,V> someHashMap;
List<K> something;

您可以像这样遍历 List,从 Map 中获取值列表:

List<V> values = something.stream()
                        //.distinct() // include this if there may be duplicate keys
                          .filter(someHashMap::containsKey)
                          .map(someHashMap::get)
                          .collect(Collectors.toList());

或者,如果您想遍历 Map(速度较慢),您可以使用:

List<V> values = someHashMap.entrySet()
                            .stream()
                            .filter(e -> something.contains(e.getKey()))
                            .map(Map.Entry::getValue)
                            .collect(Collectors.toList());

关于Java 8 检查其键的 HashMap 是否与包含键的列表相等,并返回它们相等的 HashMap 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960080/

相关文章:

java - Tomcat登录后重定向到错误的url

list - install4j:复选框列表

java - 如何在 Java 8 中创建任意一次性 lambda 表达式?

java - 即使数据集更改为另一个值,哈希值也不会更改

java - 使用 JAVA 打开/关闭 Windows 防火墙

java - 发送两个不同类的对象到jsp并显示信息

java - 如何运行单一场景

java - JPQL 查询中的列表

java - 一个二维数组空间中的 2 个或多个元素 JAVA

java - Eclipse/javac 不同意编译签名与默认方法冲突;谁是对的?