java将两个列表组合起来,并在匹配后设置值
我有两个组织列表,一个是用户,另一个是数据库中的所有组织,我在彼此内部做了两个循环,为原始列表设置followed
的值,如果用户遵循这个组织(可以从用户组织列表中知道)
List<Organization> organizationList = getServiceInstance().getOrganizationService().findOrganizationList();
List<Organization> organizations = getServiceInstance().getOrganizationService().findFollowedOrganizationList(userId);
for (Organization fOrg: organizations) {
for (Organization organization : organizationList) {
if (Objects.equals(fOrg.id, organization.id)) {
fOrg.followed = true;
}
}
}
我相信有更好的方法来做到这一点
# 1 楼答案
尝试使用地图id->;组织这样就有了两个非嵌套循环,一个用于构建地图,另一个用于循环
organizations
并匹配对象例如:
其复杂性从O(n*m)下降到O(n+m)
编辑:正如Al Mothafar正确指出的,我们应该考虑所有组织都会遇到的最坏情况。因此,他的方法的复杂性将是O(n2),而上面的方法将是O(n+n)(或者,由于常量因子通常在大oh符号中被忽略,所以只有O(n))# 2 楼答案
我使用了Apache commons库中的CollectionUtils。它有静态的交集、并集和减法,也适合你的情况。也很整洁
很好地解释了here与集合论的关系:)