Java 如何用lambda表达式替换循环和IF条件?

Java 如何用lambda表达式替换循环和IF条件?,java,java-stream,Java,Java Stream,该方法包含两个参数-映射和集合。将集合转换为列表并开始查找匹配项—映射中具有键的列表项。如果出现匹配项,则会将旧映射的元素复制到新映射 public Map<String, Boolean> getValidMap(Set<String> set, Map<String, Boolean> map) { Map<String, Boolean> validMap = new HashMap<>(); List<St

该方法包含两个参数-映射和集合。将集合转换为列表并开始查找匹配项—映射中具有键的列表项。如果出现匹配项,则会将旧映射的元素复制到新映射

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表达式和流替换和IF条件的循环。我不熟悉streams和lambda,所以我请求帮助解决这个问题。

基本上,您可以流式处理映射,然后过滤输入集中有键的条目,最后将这些条目收集到映射中并返回它

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

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

 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;
}