我有以下代码
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));
但我的病情没有评估
答案 0 :(得分:4)
首先,它应该是:
list.stream()
.filter(c-> !map.containsKey(c))
.forEach(c->result.add(c));
其次,当您想要生成collect
时,最好使用Stream
作为终端List
操作:
List<String> result =
list.stream()
.filter(c-> !map.containsKey(c))
.collect(Collectors.toList());
答案 1 :(得分:3)
list.stream()
.filter(c -> !map.containsKey(c))
.collect(Collectors.toCollection(ArrayList::new));
答案 2 :(得分:2)
应该是
list.stream().filter(c-> !map.containsKey(c)).forEach(result::add);
更好的方法是:
List<String> result = list.stream().filter(c -> !map.constainsKey(c)).collect(Collectors.toList());
答案 3 :(得分:2)
Name
未在范围内的任何位置定义。 lambda参数的名称是c
。你应该使用它。collect(Collectors.toList())
应该用于删除显式声明并使其更具表现力。List<String> result =
list.stream()
.filter(c -> !map.containsKey(c))
.collect(Collectors.toList());