我有一个Map<String, List<SomeClass>> someMap,我正在根据someKey我正在执行其他操作的 SomeClass 列表中的每个元素检索值。
someMap.getOrDefault(someKey, new ArrayList<>()).forEach(...)
Run Code Online (Sandbox Code Playgroud)
我还希望能够在找不到someKey. 我如何才能以最佳方式实现它?有没有其他功能/方法可以实现这种行为?
Map<String, List<String>> map = new HashMap<>();
List<String> l = new ArrayList<>();
l.add("b");
map.put("a", l);
Run Code Online (Sandbox Code Playgroud)
是的,您可以在一个语句中完成。使用.compute().
map.compute("a", (k, v) -> {
if (v == null) {
System.out.println("Key Not Found");
return new ArrayList<>();
}
return v;
}).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
还有computeIfAbsent()它如果该键不存在,只计算拉姆达。
请注意,来自文档:
尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为 null)。
这将添加在您的地图中未找到的密钥。
如果您想稍后删除这些键,只需将这些键添加到 if 内的列表中,并在如下语句中删除它们:
map.keySet().removeAll(listToRemove);
Run Code Online (Sandbox Code Playgroud)