尝试制作应用程序用户管理系统突然出现了问题。我有一个ArrayList
组f.e. {Group1,Group2,Group3}。如果我将user
分配给一个组,我会将其放入HashMap
,其中{key,value}为{user,group}。如果user
没有分配group
,我想删除此group
。如何找出group
未使用的哪个?
答案 0 :(得分: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());
答案 1 :(得分:0)
将地图值转换为HashSet以获得恒定时间,如下所示
Set<String> usedGroups = new HashSet<>(map.values());
然后可以按以下方式进行检查
for (String group : list) {
if (usedGroups.contains(group)) { ... }
}