【发布时间】:2015-05-20 18:36:13
【问题描述】:
我在工作中看到了这个代码 sn-p。我无法正确了解这里发生的事情。我尝试使用调试器获取值,但调试器在这里没有帮助。
public static void process (ErrorCat exc, String toFind) {
Map<String, Function<Error, Error>> translate = new HashMap<>();
translate.put("foo", new classThatimplementsFunction());
translate.put("bar", new classThatimplementsFunction())
List<Error> Errors = Lists.newArrayList();
List<Error> retErrors = Lists.newArrayList();
retErrors.addAll(exc.getErrors());
translate.keySet()
.stream()
.filter(k->toFind.contains(k))
.forEach(key->exc.getErrors() // from here I dont follow
.stream()
.forEach(e->{retErrors.remove(e); Errors.add(translate.get(key).apply(e));}));
我已经在上面评论了我开始难以理解的地方。
是为每个被过滤的key 执行的第二个ForEach。如果是这样,那么在 key 的第二次迭代期间retErrors.remove(e); 将无效(因为第一次迭代后 retErrors 将为空)
【问题讨论】:
-
你不能问问写这段代码的人吗?你肯定会有更好的解释
-
我希望那个人继续工作......
-
哦,那太不幸了。这就是为什么你应该评论你的代码。
标签: lambda functional-programming java-8 java-stream