Java 检查多个哈希映射是否为空

Java 检查多个哈希映射是否为空,java,for-loop,hashmap,Java,For Loop,Hashmap,我正在尝试查找多个哈希映射是否为空 提供一些上下文。我在这里声明了一个hashmap static Map<Integer, College> tblColleges = new HashMap<Integer, College>(); 只有在至少有一所学院设有系的情况下,我才能开设一个专业 基本上,对于tblColleges中存在的每个college对象,我正在检查它的department hashmap是否为空。如果它是空的,那么我增加空学院的数量 之后,我将col

我正在尝试查找多个哈希映射是否为空

提供一些上下文。我在这里声明了一个hashmap

static Map<Integer, College> tblColleges = new HashMap<Integer, College>();
只有在至少有一所学院设有系的情况下,我才能开设一个专业

基本上,对于tblColleges中存在的每个college对象,我正在检查它的department hashmap是否为空。如果它是空的,那么我增加空学院的数量

之后,我将college对象的数量与找到的空college对象进行比较,如果它们相等,则打印一个错误

我想知道是否有更好更有效的方法来实现这一点,可能是使用一些我不熟悉的函数,而不是使用变量。

Q:你能“更有效地”进行检查吗

答:你可以稍微优化一下:

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

问:你能用更少的代码进行检查吗

答:使用Java 8流,您可以将最后一个写为:

boolean nonEmptyColleges = Databases.tblColleges.values().stream()
           .anyMatch(c -> !c.tblDepartments.isEmpty());
(我想……)


问:但这是正确的方法吗

答:国际海事组织,没有

似乎您打算在每次添加专业时进行此检查。那没必要

专业只能作为部门属性存在

您需要检查的关键是您要为其添加专业的部门是否存在

  • 如果该部门不存在,则无法将该专业添加到该部门
  • 如果该系确实存在,您可以选择该系的专业,无论该系目前是否为学院的系1
这里更重要的一点是,任何数据模型都会有各种各样的数据完整性规则/约束。但这确实意味着您需要在每次更改模型时显式地检查它们。您只需检查变更的先决条件(例如,部门存在)以及任何可能因变更而无效的约束



1.“非”案例假设可能有其他方式找到
部门
。它可能是一个单独的
部门
对象表,也可能是您正在创建和构建一个新的
部门
,但尚未将其添加到其
学院

您正在寻找
tblColleges.isEmpty()
?不一定,我已经在上面展示了。问题是我可能会有多个学院,但还没有院系。谢谢你的建议。当你说我应该只检查我试图添加专业的部门是否存在时,我的问题是,我只知道用户选择了哪个部门。我希望能够打印出错误,避免让用户在没有部门的情况下首先选择部门。。。如果一个部门不存在,用户如何选择它?对不起,我应该解释得更清楚。我的程序的设置方式是允许用户选择他们想要创建的内容(学院、系、专业)。如果他们选择创建一个专业,系统会要求他们选择一所学院和以下一个系。我想避免让他们在无法开设专业的情况下选择学院和系,这就更没有意义了。逻辑应该是:1)如果没有学院,只能创建一所学院;2)如果有学院而没有系,则可以创建学院或系;3)否则,可以创建学院、系和专业。你不需要知道是否只有没有系的学院。如果有一个系,那么一定有一个学院有一个系。除非你允许在一所大学里建立一个尚未建立的系。。。在这种情况下,没有理由停止在非学院的系开设专业!
boolean nonEmptyColleges = false;

for (int college: Databases.tblColleges.values()) {
    if (!college.tblDepartments.isEmpty()) {
        nonEmptyColleges = true;
        break;
    }
}
boolean nonEmptyColleges = Databases.tblColleges.values().stream()
           .anyMatch(c -> !c.tblDepartments.isEmpty());