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