private long countOverlappingTargetsWithPreviousGroups(final String baseFilter, final List<RolloutGroup> groups, final RolloutGroup group, final int groupIndex, final Map<String, Long> targetFilterCounts) { // there can't be overlapping targets in the first group if (groupIndex == 0) { return 0; } final List<RolloutGroup> previousGroups = groups.subList(0, groupIndex); final String overlappingTargetsFilter = RolloutHelper.getOverlappingWithGroupsTargetFilter(baseFilter, previousGroups, group); if (targetFilterCounts.containsKey(overlappingTargetsFilter)) { return targetFilterCounts.get(overlappingTargetsFilter); } else { final long overlappingTargets = targetManagement.countByRsql(overlappingTargetsFilter); targetFilterCounts.put(overlappingTargetsFilter, overlappingTargets); return overlappingTargets; } }