我有Map<Key1, Map<Key2, CustomObject>>
。我需要浏览Map
,检查是否Key2.equals("a string")
并返回Map<Key1, CustomObject>
。
这可以用java 8吗?它应该用java 8完成还是嵌套for循环更好?
答案 0 :(得分:8)
您可以过滤输入Collectors.toMap
的条目,以仅保留其值包含&#34;字符串&#34;的条目。键。然后使用Map
将其收集到新的Map<Key1, CustomObject> map =
inputMap.entrySet()
.stream()
.filter(e -> e.getValue().containsKey("a string"))
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().get("a string")));
:
{{1}}
答案 1 :(得分:0)
它也有效
Map<String, SocialCredentials> collect = configData.getData()
.entrySet().stream()
.map(map -> map.getValue()
.entrySet().stream()
.filter(entry ->
profile.toLowerCase().equals(entry.getKey()))
.collect(Collectors.toMap(p -> map.getKey(),
Map.Entry::getValue)))
.collect(HashMap::new, Map::putAll, Map::putAll);
但是你的解决方案更适合我的情况。