java - 检查多个 hashmap 是否为空

标签 java for-loop hashmap

我正在尝试查找多个 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/

相关文章:

java - 用 HashMap 替换 switch 语句

java - 如何在从 URL(使用 http 连接)下载期间检索文件的大小?

java - 内部bean的范围

python - 使用for循环在python中分配数组值

r - dplyr:不带for循环输出的数据帧列表

java - 如何从 HashMap 的 ArrayList 获取特定值

java - 在 FXML 文件中多次插入相同的对象 (JavaFX)

java - Swing:GlassPane 防止鼠标指针改变

batch-file - 在 for/f 批处理命令中使用空格

java - HashMap 仅在选择某个键时打印值