如何使用java 8流式传输String和Map?

时间:2017-11-20 09:19:35

标签: java java-8 java-stream

我有Map<Key1, Map<Key2, CustomObject>>。我需要浏览Map,检查是否Key2.equals("a string")并返回Map<Key1, CustomObject>

这可以用java 8吗?它应该用java 8完成还是嵌套for循环更好?

2 个答案:

答案 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);

但是你的解决方案更适合我的情况。