如何用lambda表达式替换for和if条件的循环?

7rfyedvj  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(489)

该方法采用两个参数-一个map和一个set。将集合转换为列表并开始查找匹配项—Map中具有键的列表项。如果出现匹配项,它会将旧Map的元素复制到新Map。

public Map<String, Boolean> getValidMap(Set<String> set, Map<String, Boolean> map) {
    Map<String, Boolean> validMap = new HashMap<>();
    List<String> mainList = new ArrayList<>(set);
    for (String listRule : mainList) {
        for (Map.Entry<String, Boolean> mapRule : map.entrySet()) {
            if (listRule.equals(mapRule.getKey()))
                validMap.put(mapRule.getKey(), mapRule.getValue());
        }
    }
    return validMap;
}

我想用lambda表达式和流替换for和if条件的循环。我不熟悉streams和lambda,所以我请求帮助解决这个问题。

1cklez4t

1cklez4t1#

您可以直接从集合中使用for并使用computeifpresent:

public static Map<String, Boolean> getValidMap2(Set<String> set, Map<String, 
 Boolean> map) {
    Map<String, Boolean> validMap = new HashMap<>();
    set.forEach(s -> map.computeIfPresent(s, validMap::put));
    return validMap;
}
kninwzqo

kninwzqo2#

基本上,你可以将 Map 然后过滤输入中有键的条目 set 最后把这些条目收集到 Map 把它还给我

return map.entrySet().stream()
   .filter(entry->set.contains(entry.getKey())
   .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

相关问题