基本上问题是转换以下代码的最佳方法是什么
for (Link updateLink : updateLinks) {
for (Link link : project.getLinks()) {
if(updateLink.equals(link)){
link.setName(updateLink.getName());
link.setLink(updateLink.getLink());
}
}
}
进入更实用的友好风格。我能想到的最好的是拥有外部循环,并使用函数find来替换第二次迭代和检查。
for (final Link updateLink : updateLinks) {
Link link = Iterables.find(project.getLinks(), new Predicate<Link>() {
@Override
public boolean apply(Link p) {
return p.equals(updateLink);
}
});
link.setName(updateLink.getName());
link.setLink(updateLink.getLink());
}
有可能以更好的方式写这个吗?
答案 0 :(得分:0)
如果您只是询问有关如何使用stream和lambdas来替换迭代的建议,那么您可以使用:
updateLinks.stream().forEach(updateLink ->
project.getLinks().stream().filter(updateLink::equals)
.forEach(link -> {
link.setName(updateLink.getName());
link.setLink(updateLink.getLink());
}));
我不确定它比原始代码更清晰。