java - 性能与稍微干净的代码:在循环之前和循环期间检查属性
问题描述
我正在对现有代码添加一些更改,并注意到可以通过事先检查条件来优化它,但是这样做确实会使代码变得干净。
原始代码是这样的:
private void changeProperties(String a, String b, Document doc) {
if(!isEmptyOrNull(a)) {
doc.setA(a);
}
if(!isEmptyOrNull(b)){
doc.setB(b);
}
saveDocument(doc);
}
然后我添加了一个方法,只需接收一个列表并调用上述方法,就像这样
private void updatePropertiesForDocuments(List<Document> docs, String a, String b) {
docs.forEach(doc -> changeProperties(a, b, doc));
}
然后我意识到,在新功能中,每个文档的属性“a”和“b”将始终相同。有了这些信息,我认为检查每个文档的“a”和“b”是否为空或为空是毫无意义的(尤其是如果列表可能非常大,例如 100,000+)。
因此,我认为在进入循环之前进行空检查是一个更好的主意,如下所示:
private void updatePropertiesForDocuments(List<Document> docs, String a, String b) {
boolean isAMissing = isEmptyOrNull(a);
boolean isBMissing = isEmptyOrNull(b);
if(!isAMissing && !isBMissing) {
docs.forEach(doc -> {
doc.setA(a);
doc.setB(b);
saveDocument(doc);
});
} else if(!isBMissing) {
docs.forEach(doc -> {
doc.setB(b);
saveDocument(doc);
});
} else if(!isAMissing) {
docs.forEach(doc -> {
doc.setA(a);
saveDocument(doc);
});
}
}
我想知道,如果文档的大小很大(100,000+),性能是否会有明显差异,或者 JVM 是否进行了一些“幕后”优化,这会使进行此更改毫无意义?
解决方案
推荐阅读
- javascript - 如何防止过于频繁地执行 ajax 函数
- r - 如何将这样的值转换为 R 中的日期类型?
- c++ - 链表 - 获取临时地址的问题
- javascript - 为什么 postMessage() 只给我来自最后一个 DOM 的信息?
- symfony - Symfony 为注销路由添加逻辑
- python - 如何将字符串添加到字符串列表的末尾
- javascript - 如何在模板字符串中使用 v-if?
- android-studio - 使用 Flutter 在 Android Studio 中热重载与热重启
- flutter - Flutter:如何向 CupertinoPicker 添加新项目
- apache-kafka - Kafka 不适用于外部 NFS 卷