Skip to content

Commit 63e64ae

Browse files
Cleanup Stream usage in various spots (#97306)
Lots of spots where we did weird things around streams like redundant stream creation, redundant collecting before adding all the collected elements to another collection or so, redundant streams for joining strings and using less efficient `Collectors.toList` and in a few cases also incorrectly relying on the result being mutable.
1 parent 5eeaecd commit 63e64ae

File tree

117 files changed

+321
-442
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

117 files changed

+321
-442
lines changed

build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersTask.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,11 @@
5050
import java.nio.file.Files;
5151
import java.util.ArrayList;
5252
import java.util.Arrays;
53-
import java.util.HashMap;
5453
import java.util.List;
55-
import java.util.Map;
5654
import java.util.stream.Collectors;
5755
import javax.inject.Inject;
5856
import java.io.Serializable;
5957

60-
import javax.inject.Inject;
61-
6258
/**
6359
* Checks files for license headers..
6460
*/
@@ -193,9 +189,8 @@ public void runRat() {
193189
boolean unApprovedLicenses = stats.getNumUnApproved() > 0;
194190
if (unknownLicenses || unApprovedLicenses) {
195191
getLogger().error("The following files contain unapproved license headers:");
196-
unapprovedFiles(repFile).stream().forEachOrdered(unapprovedFile -> getLogger().error(unapprovedFile));
197-
throw new GradleException("Check failed. License header problems were found. Full details: " +
198-
repFile.getAbsolutePath());
192+
unapprovedFiles(repFile).forEach(getLogger()::error);
193+
throw new GradleException("Check failed. License header problems were found. Full details: " + repFile.getAbsolutePath());
199194
}
200195
}
201196

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportService.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.Optional;
3535
import java.util.Set;
3636
import java.util.stream.Collectors;
37+
import java.util.stream.Stream;
3738

3839
import javax.inject.Inject;
3940

@@ -287,7 +288,7 @@ static Map<String, String> parseOsRelease(final List<String> osReleaseLines) {
287288
*/
288289
private Optional<String> getDockerPath() {
289290
// Check if the Docker binary exists
290-
return List.of(DOCKER_BINARIES).stream().filter(path -> new File(path).exists()).findFirst();
291+
return Stream.of(DOCKER_BINARIES).filter(path -> new File(path).exists()).findFirst();
291292
}
292293

293294
/**
@@ -298,7 +299,7 @@ private Optional<String> getDockerPath() {
298299
*/
299300
private Optional<String> getDockerComposePath() {
300301
// Check if the Docker binary exists
301-
return List.of(DOCKER_COMPOSE_BINARIES).stream().filter(path -> new File(path).exists()).findFirst();
302+
return Stream.of(DOCKER_COMPOSE_BINARIES).filter(path -> new File(path).exists()).findFirst();
302303
}
303304

304305
private void throwDockerRequiredException(final String message) {

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java

+10-15
Original file line numberDiff line numberDiff line change
@@ -114,24 +114,19 @@ public void checkInvalidPatterns() throws IOException {
114114
} catch (UncheckedIOException e) {
115115
throw new IllegalArgumentException("Failed to read " + f + " as UTF_8", e);
116116
}
117-
List<Integer> invalidLines = IntStream.range(0, lines.size())
118-
.filter(i -> allPatterns.matcher(lines.get(i)).find())
119-
.boxed()
120-
.collect(Collectors.toList());
121117

122118
URI baseUri = getRootDir().orElse(projectLayout.getProjectDirectory().getAsFile()).get().toURI();
123119
String path = baseUri.relativize(f.toURI()).toString();
124-
failures.addAll(
125-
invalidLines.stream()
126-
.map(l -> new AbstractMap.SimpleEntry<>(l + 1, lines.get(l)))
127-
.flatMap(
128-
kv -> patterns.entrySet()
129-
.stream()
130-
.filter(p -> Pattern.compile(p.getValue()).matcher(kv.getValue()).find())
131-
.map(p -> "- " + p.getKey() + " on line " + kv.getKey() + " of " + path)
132-
)
133-
.collect(Collectors.toList())
134-
);
120+
IntStream.range(0, lines.size())
121+
.filter(i -> allPatterns.matcher(lines.get(i)).find())
122+
.mapToObj(l -> new AbstractMap.SimpleEntry<>(l + 1, lines.get(l)))
123+
.flatMap(
124+
kv -> patterns.entrySet()
125+
.stream()
126+
.filter(p -> Pattern.compile(p.getValue()).matcher(kv.getValue()).find())
127+
.map(p -> "- " + p.getKey() + " on line " + kv.getKey() + " of " + path)
128+
)
129+
.forEach(failures::add);
135130
}
136131
if (failures.isEmpty() == false) {
137132
throw new GradleException("Found invalid patterns:\n" + String.join("\n", failures));

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/JavaModulePrecommitTask.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,7 @@ private static ModuleReference esModuleFor(File filePath) {
159159
return ModuleFinder.of(filePath.toPath())
160160
.findAll()
161161
.stream()
162-
.sorted(Comparator.comparing(ModuleReference::descriptor))
163-
.findFirst()
162+
.min(Comparator.comparing(ModuleReference::descriptor))
164163
.orElseThrow(() -> new GradleException("module not found in " + filePath));
165164
}
166165
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/SplitPackagesAuditTask.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import java.util.Set;
4949
import java.util.TreeSet;
5050
import java.util.function.Consumer;
51-
import java.util.stream.Collectors;
5251

5352
import javax.inject.Inject;
5453

@@ -234,7 +233,7 @@ private void filterSplitPackages(Map<String, Set<String>> splitPackages) {
234233
String lastPackageName = null;
235234
Set<String> currentClasses = null;
236235
boolean filterErrorsFound = false;
237-
for (String fqcn : getParameters().getIgnoreClasses().get().stream().sorted().collect(Collectors.toList())) {
236+
for (String fqcn : getParameters().getIgnoreClasses().get().stream().sorted().toList()) {
238237
int lastDot = fqcn.lastIndexOf('.');
239238
if (lastDot == -1) {
240239
LOGGER.error("Missing package in classname in split package ignores: " + fqcn);

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsCheckTask.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.List;
3939
import java.util.function.Predicate;
4040
import java.util.stream.Collectors;
41+
import java.util.stream.Stream;
4142

4243
import javax.inject.Inject;
4344

@@ -128,7 +129,7 @@ private void assertNoMissmatchingTest(List<? extends Class<?>> testClassesCandid
128129
var mismatchingBaseClasses = testClassesCandidate.stream()
129130
.filter(testClassDefaultPredicate)
130131
.filter(TestingConventionsCheckWorkAction::seemsLikeATest)
131-
.collect(Collectors.toList());
132+
.toList();
132133
if (mismatchingBaseClasses.isEmpty() == false) {
133134
throw new GradleException(
134135
"Following test classes do not extend any supported base class:\n\t"
@@ -141,7 +142,7 @@ private void assertMatchesSuffix(List<String> suffixes, List<Class> matchingBase
141142
// ensure base class matching do match suffix
142143
var matchingBaseClassNotMatchingSuffix = matchingBaseClass.stream()
143144
.filter(c -> suffixes.stream().allMatch(s -> c.getName().endsWith(s) == false))
144-
.collect(Collectors.toList());
145+
.toList();
145146
if (matchingBaseClassNotMatchingSuffix.isEmpty() == false) {
146147
throw new GradleException(
147148
"Following test classes do not match naming convention to use suffix "
@@ -202,8 +203,7 @@ private static boolean matchesTestMethodNamingConvention(Method method) {
202203
}
203204

204205
private static boolean isAnnotated(Method method, Class<?> annotation) {
205-
return List.of(method.getAnnotations())
206-
.stream()
206+
return Stream.of(method.getAnnotations())
207207
.anyMatch(presentAnnotation -> annotation.isAssignableFrom(presentAnnotation.getClass()));
208208
}
209209

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -389,12 +389,11 @@ private List<ElasticsearchDistribution> configureDistributions(Project project)
389389
List<ElasticsearchDistribution> currentDistros = new ArrayList<>();
390390

391391
for (Architecture architecture : Architecture.values()) {
392-
ALL_INTERNAL.stream()
393-
.forEach(
394-
type -> currentDistros.add(
395-
createDistro(distributions, architecture, type, null, true, VersionProperties.getElasticsearch())
396-
)
397-
);
392+
ALL_INTERNAL.forEach(
393+
type -> currentDistros.add(
394+
createDistro(distributions, architecture, type, null, true, VersionProperties.getElasticsearch())
395+
)
396+
);
398397
}
399398

400399
for (Architecture architecture : Architecture.values()) {

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ public List<ObjectNode> transformRestTests(LinkedList<ObjectNode> tests, List<Re
3838
List<RestTestTransformGlobalSetup> setupTransforms = transformations.stream()
3939
.filter(transform -> transform instanceof RestTestTransformGlobalSetup)
4040
.map(transform -> (RestTestTransformGlobalSetup) transform)
41-
.collect(Collectors.toList());
41+
.toList();
4242

4343
// Collect any global teardown transformations
4444
List<RestTestTransformGlobalTeardown> teardownTransforms = transformations.stream()
4545
.filter(transform -> transform instanceof RestTestTransformGlobalTeardown)
4646
.map(transform -> (RestTestTransformGlobalTeardown) transform)
47-
.collect(Collectors.toList());
47+
.toList();
4848

4949
// Collect any transformations that are identified by an object key.
5050
Map<String, List<RestTestTransformByParentObject>> objectKeyFinders = transformations.stream()

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/toolchain/AdoptiumJdkToolchainResolver.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,8 @@ private Optional<AdoptiumVersionInfo> resolveAvailableVersion(AdoptiumVersionReq
7575
return Optional.of(
7676
Lists.newArrayList(versionsNode.iterator())
7777
.stream()
78-
.map(node -> toVersionInfo(node))
79-
.sorted(Comparator.comparing(AdoptiumVersionInfo::semver).reversed())
80-
.findFirst()
78+
.map(this::toVersionInfo)
79+
.max(Comparator.comparing(AdoptiumVersionInfo::semver))
8180
.get()
8281
);
8382
} catch (FileNotFoundException e) {

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantBasePlugin.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void checkVersion(Project project, String tool, Pattern versionRegex, int... min
8989
}
9090

9191
String version = matcher.group(1);
92-
List<Integer> versionParts = Stream.of(version.split("\\.")).map(Integer::parseInt).collect(Collectors.toList());
92+
List<Integer> versionParts = Stream.of(version.split("\\.")).map(Integer::parseInt).toList();
9393
for (int i = 0; i < minVersion.length; ++i) {
9494
int found = versionParts.get(i);
9595
if (found > minVersion[i]) {

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantShellTask.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import java.util.Arrays;
1818
import java.util.List;
1919
import java.util.function.UnaryOperator;
20-
import java.util.stream.Collectors;
2120

2221
import static org.elasticsearch.gradle.internal.vagrant.VagrantMachine.convertLinuxPath;
2322
import static org.elasticsearch.gradle.internal.vagrant.VagrantMachine.convertWindowsPath;
@@ -71,7 +70,7 @@ public void runScript() {
7170
script.add("try {");
7271
script.add("cd " + convertWindowsPath(buildLayout.getRootDirectory(), buildLayout.getRootDirectory().toString()));
7372
extension.getVmEnv().forEach((k, v) -> script.add("$Env:" + k + " = \"" + v + "\""));
74-
script.addAll(getWindowsScript().stream().map(s -> " " + s).collect(Collectors.toList()));
73+
script.addAll(getWindowsScript().stream().map(s -> " " + s).toList());
7574
script.addAll(
7675
Arrays.asList(
7776
" exit $LASTEXITCODE",

build-tools/reaper/src/main/java/org/elasticsearch/gradle/reaper/Reaper.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import java.nio.file.Paths;
1717
import java.util.Comparator;
1818
import java.util.List;
19-
import java.util.stream.Collectors;
2019
import java.util.stream.Stream;
2120

2221
/**
@@ -62,7 +61,7 @@ public static void main(String[] args) throws Exception {
6261

6362
private void reap() {
6463
try (Stream<Path> stream = Files.list(inputDir)) {
65-
final List<Path> inputFiles = stream.filter(p -> p.getFileName().toString().endsWith(".cmd")).collect(Collectors.toList());
64+
final List<Path> inputFiles = stream.filter(p -> p.getFileName().toString().endsWith(".cmd")).toList();
6665

6766
for (Path inputFile : inputFiles) {
6867
System.out.println("Process file: " + inputFile);

build-tools/src/main/java/org/elasticsearch/gradle/LazyPropertyList.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public Object[] toArray() {
5656

5757
@Override
5858
public <T1> T1[] toArray(T1[] a) {
59-
return delegate.stream().peek(this::validate).map(PropertyListEntry::getValue).collect(Collectors.toList()).toArray(a);
59+
return delegate.stream().peek(this::validate).map(PropertyListEntry::getValue).toList().toArray(a);
6060
}
6161

6262
@Override
@@ -79,7 +79,7 @@ public boolean remove(Object o) {
7979

8080
@Override
8181
public boolean containsAll(Collection<?> c) {
82-
return delegate.stream().map(PropertyListEntry::getValue).collect(Collectors.toList()).containsAll(c);
82+
return delegate.stream().map(PropertyListEntry::getValue).collect(Collectors.toSet()).containsAll(c);
8383
}
8484

8585
@Override

build-tools/src/main/java/org/elasticsearch/gradle/testclusters/RunTask.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public void beforeStart() {
136136
entry -> entry.getValue().toString()
137137
)
138138
);
139-
boolean singleNode = getClusters().stream().flatMap(c -> c.getNodes().stream()).count() == 1;
139+
boolean singleNode = getClusters().stream().mapToLong(c -> c.getNodes().size()).sum() == 1;
140140
final Function<ElasticsearchNode, Path> getDataPath;
141141
if (singleNode) {
142142
getDataPath = n -> dataDir;

build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ default void useCluster(ElasticsearchCluster cluster) {
2626
}
2727

2828
cluster.getNodes()
29-
.all(node -> node.getDistributions().stream().forEach(distro -> dependsOn(getProject().provider(() -> distro.maybeFreeze()))));
29+
.all(node -> node.getDistributions().forEach(distro -> dependsOn(getProject().provider(() -> distro.maybeFreeze()))));
3030
cluster.getNodes().all(node -> dependsOn((Callable<Collection<Configuration>>) node::getPluginAndModuleConfigurations));
3131
getClusters().add(cluster);
3232
}

client/benchmark/src/main/java/org/elasticsearch/client/benchmark/AbstractBenchmark.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.lang.management.ManagementFactory;
1919
import java.util.Arrays;
2020
import java.util.List;
21-
import java.util.stream.Collectors;
2221

2322
public abstract class AbstractBenchmark<T extends Closeable> {
2423
private static final int SEARCH_BENCHMARK_ITERATIONS = 10_000;
@@ -92,7 +91,7 @@ private void runSearchBenchmark(String[] args) throws Exception {
9291
String benchmarkTargetHost = args[1];
9392
String indexName = args[2];
9493
String searchBody = args[3];
95-
List<Integer> throughputRates = Arrays.asList(args[4].split(",")).stream().map(Integer::valueOf).collect(Collectors.toList());
94+
List<Integer> throughputRates = Arrays.stream(args[4].split(",")).map(Integer::valueOf).toList();
9695

9796
T client = client(benchmarkTargetHost);
9897

distribution/tools/geoip-cli/src/main/java/org/elasticsearch/geoip/GeoIpCli.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import java.security.MessageDigest;
3434
import java.util.Arrays;
3535
import java.util.Locale;
36-
import java.util.stream.Collectors;
3736
import java.util.stream.Stream;
3837
import java.util.zip.GZIPOutputStream;
3938

@@ -74,15 +73,15 @@ private void copyTgzToTarget(Path source, Path target) throws IOException {
7473
return;
7574
}
7675
try (Stream<Path> files = Files.list(source)) {
77-
for (Path path : files.filter(p -> p.getFileName().toString().endsWith(".tgz")).collect(Collectors.toList())) {
76+
for (Path path : files.filter(p -> p.getFileName().toString().endsWith(".tgz")).toList()) {
7877
Files.copy(path, target.resolve(path.getFileName()), StandardCopyOption.REPLACE_EXISTING);
7978
}
8079
}
8180
}
8281

8382
private void packDatabasesToTgz(Terminal terminal, Path source, Path target) throws IOException {
8483
try (Stream<Path> files = Files.list(source)) {
85-
for (Path path : files.filter(p -> p.getFileName().toString().endsWith(".mmdb")).collect(Collectors.toList())) {
84+
for (Path path : files.filter(p -> p.getFileName().toString().endsWith(".mmdb")).toList()) {
8685
String fileName = path.getFileName().toString();
8786
Path compressedPath = target.resolve(fileName.replaceAll("mmdb$", "") + "tgz");
8887
terminal.println("Found " + fileName + ", will compress it to " + compressedPath.getFileName());
@@ -111,7 +110,7 @@ private void createOverviewJson(Terminal terminal, Path directory) throws IOExce
111110
XContentGenerator generator = XContentType.JSON.xContent().createGenerator(os)
112111
) {
113112
generator.writeStartArray();
114-
for (Path db : files.filter(p -> p.getFileName().toString().endsWith(".tgz")).collect(Collectors.toList())) {
113+
for (Path db : files.filter(p -> p.getFileName().toString().endsWith(".tgz")).toList()) {
115114
terminal.println("Adding " + db.getFileName() + " to overview.json");
116115
MessageDigest md5 = MessageDigests.md5();
117116
try (InputStream dis = new DigestInputStream(new BufferedInputStream(Files.newInputStream(db)), md5)) {

distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/SystemJvmOptions.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010

1111
import java.util.List;
1212
import java.util.stream.Collectors;
13+
import java.util.stream.Stream;
1314

1415
final class SystemJvmOptions {
1516

1617
static List<String> systemJvmOptions() {
17-
return List.of(
18+
return Stream.of(
1819
/*
1920
* Cache ttl in seconds for positive DNS lookups noting that this overrides the JDK security property networkaddress.cache.ttl;
2021
* can be set to -1 to cache forever.
@@ -61,7 +62,7 @@ static List<String> systemJvmOptions() {
6162
*/
6263
"--add-opens=java.base/java.io=org.elasticsearch.preallocate",
6364
maybeOverrideDockerCgroup()
64-
).stream().filter(e -> e.isEmpty() == false).collect(Collectors.toList());
65+
).filter(e -> e.isEmpty() == false).collect(Collectors.toList());
6566
}
6667

6768
/*

libs/core/src/main/java/org/elasticsearch/core/internal/provider/EmbeddedImplClassLoader.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ private EmbeddedImplClassLoader(ClassLoader parent, Map<JarMeta, CodeSource> pre
108108
.collect(toUnmodifiableMap(k -> k.getKey().prefix(), Map.Entry::getValue));
109109
Map<String, JarMeta> map = new HashMap<>();
110110
for (var jarMeta : prefixToCodeBase.keySet()) {
111-
jarMeta.packages().stream().forEach(pkg -> {
111+
jarMeta.packages().forEach(pkg -> {
112112
var prev = map.put(pkg, jarMeta);
113113
assert prev == null;
114114
});

libs/core/src/main/java/org/elasticsearch/core/internal/provider/InMemoryModuleFinder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ static ModuleDescriptor filterRequires(ModuleDescriptor md, Set<String> missingM
7272
md.requires().stream().filter(req -> missingModules.contains(req.name()) == false).forEach(builder::requires);
7373
md.exports().forEach(builder::exports);
7474
md.opens().forEach(builder::opens);
75-
md.provides().stream().forEach(builder::provides);
76-
md.uses().stream().forEach(builder::uses);
75+
md.provides().forEach(builder::provides);
76+
md.uses().forEach(builder::uses);
7777
builder.packages(md.packages());
7878
return builder.build();
7979
}

libs/dissect/src/main/java/org/elasticsearch/dissect/DissectParser.java

-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ public DissectParser(String pattern, String appendSeparator) {
129129
Set<String> appendKeyNames = dissectPairs.stream()
130130
.filter(dissectPair -> APPEND_MODIFIERS.contains(dissectPair.key().getModifier()))
131131
.map(KEY_NAME)
132-
.distinct()
133132
.collect(Collectors.toSet());
134133
if (appendKeyNames.size() > 0) {
135134
List<DissectPair> modifiedMatchPairs = new ArrayList<>(dissectPairs.size());

libs/ssl-config/src/main/java/org/elasticsearch/common/ssl/SslClientAuthenticationMode.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.LinkedHashMap;
1212
import java.util.Locale;
1313
import java.util.Map;
14-
import java.util.stream.Collectors;
1514

1615
import javax.net.ssl.SSLParameters;
1716

@@ -82,7 +81,7 @@ static Map<String, SslClientAuthenticationMode> buildLookup() {
8281
public static SslClientAuthenticationMode parse(String value) {
8382
final SslClientAuthenticationMode mode = LOOKUP.get(value.toLowerCase(Locale.ROOT));
8483
if (mode == null) {
85-
final String allowedValues = LOOKUP.keySet().stream().collect(Collectors.joining(","));
84+
final String allowedValues = String.join(",", LOOKUP.keySet());
8685
throw new SslConfigException(
8786
"could not resolve ssl client authentication, unknown value [" + value + "], recognised values are [" + allowedValues + "]"
8887
);

0 commit comments

Comments
 (0)