我正在尝试查找多个 HashMap 是否为空。
提供一些背景信息。我在这里声明了一个 HashMap 。
static Map<Integer, College> tblColleges = new HashMap<Integer, College>();
对于每个大学对象:
Map<Integer, Department> tblDepartments = new HashMap<Integer, Department>();
我正在尝试添加专业。专业只能作为部门的属性而存在。
这就是我现在所拥有的。
int numberofColleges = Databases.tblColleges.size();
int emptyColleges = 0;
for(int key: Databases.tblColleges.keySet()) {
if(Databases.getTblColleges(key).tblDepartments.isEmpty()) {
emptyColleges++;
}
}
if(numberofColleges == emptyColleges) {
System.out.println("Invalid. Requires at least 1 department.");
}
只有至少一所大学有一个系,我才可以创建一个专业。
本质上,对于 tblColleges 中存在的每个大学对象,我都会检查它的部门 HashMap 是否为空。如果它是空的,那么我会增加空大学的数量。
然后,我将大学对象的数量与找到的空大学对象的数量进行比较,如果它们相等,则打印错误。
我想知道是否有更好更有效的方法来做到这一点,也许使用一些我不熟悉的函数而不是使用变量。
最佳答案
问:你能“更高效”地进行检查吗?
答:你可以稍微优化一下:
boolean nonEmptyColleges = false;
for (int key: Databases.tblColleges.keySet()) {
if (!Databases.getTblColleges(key).tblDepartments.isEmpty()) {
nonEmptyColleges = true;
break;
}
}
一旦找到带有部门
的学院
,上述电路就会短路。在很多情况下,这将是一个重大改进。
然后,假设 Databases.tblColleges
是一个 Map
:
boolean nonEmptyColleges = false;
for (int college: Databases.tblColleges.values()) {
if (!college.tblDepartments.isEmpty()) {
nonEmptyColleges = true;
break;
}
}
<小时/>
问:可以用更少的代码进行检查吗?
A:使用 Java 8 流,您可以将最后一个写为:
boolean nonEmptyColleges = Databases.tblColleges.values().stream()
.anyMatch(c -> !c.tblDepartments.isEmpty());
(我认为...)
<小时/>问:但是这是正确的方法吗?
答:我认为,不。
看来您打算在每次添加专业时都进行此检查。那没有必要。
Majors can only exist as an attribute of Department.
您需要检查的关键是您要添加专业的部门是否存在。
- 如果该系不存在,您无法向其中添加专业。
- 如果该系确实存在,您可以选择该系的专业,无论它目前是否是大学的一个系1。
这里更重要的一点是,任何数据模型都会有各种数据完整性规则/约束。但这确实意味着每次更改模型时都需要显式检查所有这些。您只需检查更改的先决条件(例如部门是否存在)以及可能因更改而失效的任何限制。
<小时/>1 - “not”情况假设可能存在其他查找部门
的方法。它可能是 Department
对象的单独表,也可能是您正在创建和构建新的 Department
且尚未将其添加到其大学
还没。
关于java - 检查多个 hashmap 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55988513/