private List<RetrievedClusters> retrieveClusters(String application, Project project) { return clusterProviders.get().stream() .map(clusterProvider -> { Map<String, Set<Cluster>> clusterSummariesByAccount = clusterProvider.getClusterSummaries(application); if (clusterSummariesByAccount == null) { return null; } Set<Cluster> allClusterSummaries = clusterSummariesByAccount .values() .stream() .flatMap(Collection::stream) .collect(Collectors.toSet()); Set<Cluster> matchingClusterSummaries = new HashSet<>(); for (ProjectCluster projectCluster : project.config.clusters) { matchingClusterSummaries.addAll(findClustersForProject(allClusterSummaries, projectCluster)); } Set<Cluster> expandedClusters = matchingClusterSummaries .stream() .map(c -> clusterProvider.getCluster(c.getMoniker().getApp(), c.getAccountName(), c.getName())) .collect(Collectors.toSet()); return new RetrievedClusters(application, expandedClusters); }) .filter(Objects::nonNull) .collect(Collectors.toList()); }