我有2个组织列表,一个跟随用户,另一个是数据库中的所有组织,我在彼此之间创建了2个循环,以followed
为原始列表设置值true
如果用户关注此组织(可以从用户组织列表中获知)
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;
}
}
}
我相信有更好的方法可以做到这一点。
答案 0 :(得分:2)
尝试使用地图ID-&gt;组织。这样你就有了2个非嵌套循环,一个用于构建地图,一个循环遍历ID
Name
List Of IDs From Table1
并匹配对象。
示例:
organizations
这种复杂性从O(n * m)下降到O(n + m)。
编辑:正如Al-Mothafar正确指出的那样,我们应该考虑跟随所有组织的最坏情况。因此,他的方法的复杂性将是O(n 2 ),而上述方法将是O(n + n)(或者,因为常数因子通常被遗漏为大哦符号,只是O( n))的
答案 1 :(得分:1)
我使用了Apache commons库中的CollectionUtils。它具有静态交集,并集和减法方法,适用于您的情况。非常整洁。
很好地解释了here与集合论的关系:)
答案 2 :(得分:0)
我不认为有更好的方法可以做到这一点,至少在性能方面没有:你必须在某个地方迭代组织。通过将一些行打包成私有方法可以提高可读性。
我唯一的建议是你可以用Organization.followers(List)替换Organization.followed(boolean)。如果是这样,您可以简单地检查列表是否为空。 OTOH,这可能会减慢数据库访问速度。