Java 8 检查其键与包含键的列表的哈希图相等性,并在它们相等的地方返回哈希图值

Max*_*ver 3 java list hashmap java-8 java-stream

我想用 Java 8 迭代哈希图,将其键与给定列表(包含具有键 ID 的对象)进行比较,并从哈希图中返回值,其中哈希图的键和列表中对象的键相等. 我想不通。

我尝试完成这样的事情:

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

4ca*_*tle 5

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

Map<K,V> someHashMap;
List<K> something;
Run Code Online (Sandbox Code Playgroud)

您可以Map通过迭代List这样的方式从 中获取值列表:

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

或者,如果您想迭代Map(较慢),您可以使用:

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

  • @MaxBeaver:你会在 `filter` 之前添加一个额外的 `.map(MyClass::getId)`(在第一种方法中)。 (2认同)