【发布时间】:2018-01-25 13:57:34
【问题描述】:
我有一个值数组
String [] str = { ONE, TWO, THREE };
以及一些存储在地图中的键值对
Map<String, String> map;
如何使用 Stream API 从映射中获取其键包含在数组中的所有条目?
【问题讨论】:
-
请付出一些努力,到目前为止您尝试了什么?您自己解决这个问题到底有什么困难? (见help center,How to Ask)
-
使用 Guava 你可以做到
Map.filterKeys(map, Arrays.asList(str)::contains). -
@shmosel 我刚刚查找了该方法并偶然发现:“返回的地图是
unfiltered的实时视图”。您是否真的要使用一个映射,其中每个键查找都意味着通过数组进行线性搜索? -
@Holger 取决于它的使用方式。如有必要,您可以轻松地将其复制到新地图。
-
@shmosel 当然,如果调用者意识到这个微妙之处。可能值得注意的是,还有标准的 API 可能性,例如
result = new HashMap<>(map); result.keySet().retainAll(Arrays.asList( str));,或者甚至在原始地图上使用retainAll,如果它是可变的并且不再需要旧状态,因为JDK1.2......
标签: java hashmap java-stream