【问题标题】:Improving upon the double list iteration using Guava使用 Guava 改进双列表迭代
【发布时间】:2015-03-23 09:53:01
【问题描述】:

基本上问题是转换以下代码的最佳方法是什么

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

有没有可能写得更好?

【问题讨论】:

    标签: java collections functional-programming guava


    【解决方案1】:

    如果您只是询问有关如何使用流和 lambda 替换您的迭代的建议,那么您可以使用:

    updateLinks.stream().forEach(updateLink -> 
        project.getLinks().stream().filter(updateLink::equals)
            .forEach(link -> {
                link.setName(updateLink.getName());
                link.setLink(updateLink.getLink());
            }));
    

    我不确定这是否比您的原始代码更清晰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 2022-11-11
      • 2018-10-12
      • 2018-04-29
      • 2012-08-21
      • 2016-01-22
      • 2018-07-08
      相关资源
      最近更新 更多