检查地图中存在的值列表的最佳方法

Sid*_*kar 5 java collections dictionary hashmap java-8

我有一个Collection包含一些值。

Collection<String> myList = new ArrayList<String>();
myList.add("a");
myList.add("b");
myList.add("c");
Run Code Online (Sandbox Code Playgroud)

我创建了一个Map具有一些值的:

Map<String, String> myMap = new HashMap<String, String>();
myMap.put("r", "r");
myMap.put("s","m");
myMap.put("t", "n");
myMap.put("a", "o");
Run Code Online (Sandbox Code Playgroud)

我想检查列表中的值是否作为地图中的键存在?我知道使用 Java 的方法是遍历列表并使用 myMap.containsKey() 检查地图是否包含该特定值。我想知道是否有任何使用流或 for-each 的东西可以为我节省代码行或有效的方法!感谢您仔细考虑。

编辑:我想存储myList存在于myMap. 所以我的输出可以是一个列表,例如在这种情况下[b,c]

Anu*_*sha 7

Set<String> mySet = new HashSet<String>(myList);
myMap.keySet().containsAll(set);
Run Code Online (Sandbox Code Playgroud)

这回答了你的问题了吗?

在您的编辑之后:鉴于上述内容,您可以使用以下问题之一的答案来获得两组之间的键差异:-在 java 中获得两组之间的对称差异的最佳方法是什么?获取两组之间的差异

  • 将“myList”复制到“HashSet”是没有意义的。只需执行 `myMap.keySet().containsAll(myList);` 就足够了。除非您要通过“mySet.removeAll(myMap.keySet())”获取丢失的密钥。但除非你真的这么做,否则“HashSet”就已经过时了。 (2认同)

Lag*_*guh 1

使用Streams你可以做类似的事情:

List<String> result = myList.stream()                
                            .filter(myMap::containsKey)
                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

生成的列表将包含在映射中作为键出现的值。

如果你想打印它们,你可以这样做:

result.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)