试图做一个应用程序用户管理系统,突然遇到了一个问题。我有一ArrayList组 fe {Group1, Group2, Group3}。如果我分配user给一个组,我会将其放入HashMap{key, value} 是 {user, group} 的位置。如果没有user分配给group,当我想删除这个group。如何找出哪些group未使用?
2 回答
1
假设您有ArrayList<Group> groups,HashMap<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 回答