简化 hashmap 值的循环
Simplifying loops over hashmap values
我有以下代码:
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 循环有点陌生,流需要转换它们的帮助
你至少可以避免重复。
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);
}
您可以将所有值与流连接:
s += blobHashMap.values().stream().map(Object::toString).collect(Collectors.joining());
你可以使用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);
}
我有以下代码:
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 循环有点陌生,流需要转换它们的帮助
你至少可以避免重复。
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);
}
您可以将所有值与流连接:
s += blobHashMap.values().stream().map(Object::toString).collect(Collectors.joining());
你可以使用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);
}