Optimize MultiValueMap iteration operations

* use forEach and putIfAbsent to copy headers in DefaultClientRequestBuilder
* use forEach in ReactorClientHttpRequest and ReactorNetty2ClientHttpRequest
* circumvent ReadOnlyHttpHeaders.entrySet()
* ensure the fast path to LinkedCaseInsensitiveMap for forEach and putIfAbsent exists

Closes gh-29972
This commit is contained in:
James Yuzawa
2023-02-14 20:26:52 -05:00
committed by Brian Clozel
parent beb23b5da6
commit 5dacf50b9b
9 changed files with 88 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable;
@@ -295,6 +296,16 @@ public class WebSocketHttpHeaders extends HttpHeaders {
return this.headers.entrySet();
}
@Override
public void forEach(BiConsumer<? super String, ? super List<String>> action) {
this.headers.forEach(action);
}
@Override
public List<String> putIfAbsent(String key, List<String> value) {
return this.headers.putIfAbsent(key, value);
}
@Override
public boolean equals(@Nullable Object other) {