1

试图做一个应用程序用户管理系统,突然遇到了一个问题。我有一ArrayList组 fe {Group1, Group2, Group3}。如果我分配user给一个组,我会将其放入HashMap{key, value} 是 {user, group} 的位置。如果没有user分配给group,当我想删除这个group。如何找出哪些group未使用?

4

2 回答 2

1

假设您有ArrayList<Group> groupsHashMap<User, Group> userMap然后您可以找到没有用户的组:

Set<Group> mappedGroup = new HashSet<>(userMap.values());
groups.removeIf(mappedGroup::contains); /? After this `groups` is unmapped groups list

前提是Group类已经实现equals/hashcode

如果您不想修改原始groups列表,则可以执行以下操作:

List<Group> unmappedGroups = groups.stream().filter(g -> !mappedGroup.contains(g))
                                   .collect(Collectors.toList());
于 2018-06-18T17:01:56.980 回答
0

将映射值转换为 HashSet 以进行恒定时间查找,如下所示     

Set<String> usedGroups = new HashSet<>(map.values());

然后可以通过以下方式进行检查

for (String group : list) {
     if (usedGroups.contains(group)) { ... }
}
于 2018-06-18T17:01:48.530 回答