【问题标题】:Simplifying loops over hashmap values简化哈希图值的循环
【发布时间】:2022-01-08 23:29:51
【问题描述】:

我有以下代码:

public void setSHAShortSha() {
        if (parentTracked == null) {
            String s = "";
            for (Blob b : blobHashMap.values()) {
                s += b.toString();
            }
            sha = Utils.sha1(logMessage + dateFormatted + s);
        } else {
            String s = "";
            for (Blob b : blobHashMap.values()) {
                s += b.toString();
            }
            for (Blob b : parentTracked.values()) {
                s += b.toString();
            }
            sha = Utils.sha1(logMessage + dateFormatted + s);
        }
        shortSha = MyUtils.getShortSha(sha);
    }

这看起来很复杂。有没有更简单的方法来用java编写它?
 boolean found = false;
        for (Commit commit : commits.values()) {
            if (commit.getLogMessage().compareTo(commitMessageToSearch) == 0) {
                System.out.println(commit.getSha());
                found = true;
            }
        }
        if (!found) {
            System.out.println("aksdhlkasj");
        }

在同一行上再添加一个代码。我对不同形式的 for 循环有点陌生,流需要帮助来转换它们

【问题讨论】:

标签: java hashmap


【解决方案1】:

你至少可以避免重复。

public void setSHAShortSha() {
    String s = "";
    for (Blob b : blobHashMap.values()) {
        s += b.toString();
    }
    if (parentTracked != null) {
        for (Blob b : parentTracked.values()) {
            s += b.toString();
        }
    }
    sha = Utils.sha1(logMessage + dateFormatted + s);
    shortSha = MyUtils.getShortSha(sha);
}

【讨论】:

    【解决方案2】:

    您可以将所有值与流连接:

    s += blobHashMap.values().stream().map(Object::toString).collect(Collectors.joining());
    

    【讨论】:

    • 这很酷。我会记住这一点。如果你能再帮我写一个代码,那就太好了。我已经添加到主要问题
    【解决方案3】:

    你可以使用 Map 的 forEach 方法,像这样:

    StringBuilder stringBuilder = new StringBuilder();
        blobHashMap.forEach((key, blob) -> {
            stringBuilder.append(blob.toString());
        });
        if (parentTracked != null) {
            parentTracked.forEach((key, blob) -> {
                stringBuilder.append(blob.toString());
            });
        }
        sha = Utils.sha1(logMessage + dateFormatted + stringBuilder.toString());
        shortSha = MyUtils.getShortSha(sha);
    }
    

    【讨论】:

    • 如果你不使用key,你可以改用blobHashMap.values().forEach(blob -> ...)
    • 正确,留下来表明你可以使用它,如果你需要它。
    猜你喜欢
    • 2012-03-05
    • 2012-03-09
    • 2013-01-10
    • 2014-11-14
    • 2017-12-01
    • 1970-01-01
    • 2013-03-31
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多