Skip to content

Commit 3087413

Browse files
committed
create resources map only once
Signed-off-by: radoslaw.chrzanowski <[email protected]>
1 parent 1696cd5 commit 3087413

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

cache/src/main/java/io/envoyproxy/controlplane/cache/SnapshotResources.java

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ public abstract class SnapshotResources<T extends Message> {
2424
public static <T extends Message> SnapshotResources<T> create(
2525
Iterable<?> resources,
2626
String version) {
27+
ImmutableMap<String, VersionedResource<T>> versionedResourcesMap = createVersionedResourcesMap(resources);
2728
return new AutoValue_SnapshotResources<>(
28-
resourcesMap(resources),
29+
versionedResourcesMap,
30+
createResourcesMap(versionedResourcesMap),
2931
(r) -> version
3032
);
3133
}
@@ -41,18 +43,19 @@ public static <T extends Message> SnapshotResources<T> create(
4143
public static <T extends Message> SnapshotResources<T> create(
4244
Iterable<VersionedResource<T>> resources,
4345
ResourceVersionResolver versionResolver) {
46+
ImmutableMap<String, VersionedResource<T>> versionedResourcesMap = createVersionedResourcesMap(resources);
4447
return new AutoValue_SnapshotResources<>(
45-
resourcesMap(resources),
48+
versionedResourcesMap,
49+
createResourcesMap(versionedResourcesMap),
4650
versionResolver);
4751
}
4852

49-
private static <T extends Message> ImmutableMap<String, VersionedResource<T>> resourcesMap(
53+
private static <T extends Message> ImmutableMap<String, VersionedResource<T>> createVersionedResourcesMap(
5054
Iterable<?> resources) {
5155
List<?> resourcesList = StreamSupport.stream(resources.spliterator(), false)
5256
.collect(Collectors.toList());
5357
if (resourcesList.stream().allMatch(Predicates.instanceOf(VersionedResource.class)::apply)) {
54-
ImmutableMap<String, VersionedResource<T>> result = StreamSupport
55-
.stream(resourcesList.spliterator(), false)
58+
ImmutableMap<String, VersionedResource<T>> result = resourcesList.stream()
5659
.collect(
5760
Collector.of(
5861
Builder<String, VersionedResource<T>>::new,
@@ -77,16 +80,9 @@ private static <T extends Message> ImmutableMap<String, VersionedResource<T>> re
7780
}
7881
}
7982

80-
/**
81-
* Returns a map of the resources in this collection, where the key is the name of the resource.
82-
*/
83-
public abstract Map<String, VersionedResource<T>> versionedResources();
84-
85-
/**
86-
* Returns a map of the resources in this collection, where the key is the name of the resource.
87-
*/
88-
public Map<String, T> resources() {
89-
return versionedResources().values().stream().collect(
83+
private static <T extends Message> ImmutableMap<String, T> createResourcesMap(
84+
ImmutableMap<String, VersionedResource<T>> versionedResources) {
85+
return versionedResources.values().stream().collect(
9086
Collector.of(
9187
Builder<String, T>::new,
9288
(b, e) -> {
@@ -96,6 +92,16 @@ public Map<String, T> resources() {
9692
Builder::build));
9793
}
9894

95+
/**
96+
* Returns a map of the resources in this collection, where the key is the name of the resource.
97+
*/
98+
public abstract Map<String, VersionedResource<T>> versionedResources();
99+
100+
/**
101+
* Returns a map of the resources in this collection, where the key is the name of the resource.
102+
*/
103+
public abstract Map<String, T> resources();
104+
99105
/**
100106
* Returns the version associated with this all resources in this collection.
101107
*/

0 commit comments

Comments
 (0)