java - 将 foreach 转换为 Java 8 过滤流

标签 java lambda java-8 java-stream

我有以下代码

Map<String, List<String>> map= new HashMap<>();
map.put("a", Arrays.asList("a1"));
map.put("b", Arrays.asList("a2"));

List<String> result = new ArrayList<>();

List<String> list = new ArrayList<>();
list.add("a");
list.add("c");

for (String names : list) {
    if (!map.containsKey(names)) {
          result.add(names);
    }
}

然后我尝试将它迁移到 Java 8。我做错了什么?

list.stream()
    .filter(c -> !map.containsKey(Name))
    .forEach(c -> result.add(c));

但是我的条件没有评估

最佳答案

首先应该是:

list.stream()
    .filter(c-> !map.containsKey(c))
    .forEach(c->result.add(c));

其次,当您想要生成List 时,最好使用collect 作为终端Stream 操作:

List<String> result = 
    list.stream()
        .filter(c-> !map.containsKey(c))
        .collect(Collectors.toList());

关于java - 将 foreach 转换为 Java 8 过滤流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50212667/

相关文章:

java - Glassfish 记录日期和夏令时?

java - Android首次使用addValueEventListener的方法

java - 我可以使用 setter 方法来替换 Final 变量吗?

Java8 与 JDBC 驱动程序兼容的问题

java - 使用 PostgreSQL 和 Tomcat 的单个应用程序/数据库服务器的安全性

java - Base64 编码和解码不会给出相同的结果

java - 将 List<Object[]> 数组转换为 Map

java - 将带有方法引用的 lambda 转换为 Java 7 中的函数

c# - Lambda 函数中的 If 语句?

java - 顺序流和共享状态