You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by gg...@apache.org on 2022/09/28 04:36:09 UTC

[httpcomponents-core] branch master updated (459a6dd0a -> cf27cce26)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git


    from 459a6dd0a Add SECURITY.md
     new 57f1fe8ae Add and use TLS accessor methods to use lambdas from httpclient5 later
     new cf27cce26 Use Java 8 features and APIs

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/hc/core5/http2/hpack/HPackEncoder.java  |   7 +-
 .../http2/impl/DefaultH2RequestConverter.java      |   4 +-
 .../http2/impl/DefaultH2ResponseConverter.java     |   4 +-
 .../impl/nio/AbstractH2StreamMultiplexer.java      |  46 +---
 .../http2/impl/nio/ClientH2PrefaceHandler.java     |   2 +-
 .../http2/impl/nio/ServerH2PrefaceHandler.java     |   4 +-
 .../H2MultiplexingRequesterBootstrap.java          |   4 +-
 .../impl/nio/bootstrap/H2RequesterBootstrap.java   |   4 +-
 .../impl/nio/bootstrap/H2ServerBootstrap.java      |   4 +-
 .../core5/http2/nio/support/BasicPingHandler.java  |   6 +-
 .../H2ConscriptRequestExecutionExample.java        |  16 +-
 .../core5/http2/examples/H2FileServerExample.java  |   8 +-
 .../http2/examples/H2FullDuplexClientExample.java  |   8 +-
 .../http2/examples/H2FullDuplexServerExample.java  |   8 +-
 .../examples/H2MultiStreamExecutionExample.java    |  19 +-
 .../http2/examples/H2RequestExecutionExample.java  |  10 +-
 .../examples/H2TlsAlpnRequestExecutionExample.java |  19 +-
 .../examples/H2ViaHttp1ProxyExecutionExample.java  |  19 +-
 .../core5/http2/frame/TestDefaultFrameFactory.java |   2 +-
 .../hc/core5/http2/hpack/TestHPackCoding.java      |   4 +-
 .../hc/core5/reactive/ReactiveDataProducer.java    |   6 +-
 .../examples/ReactiveFullDuplexClientExample.java  |   6 +-
 .../apache/hc/core5/benchmark/HttpBenchmark.java   |  27 +-
 .../org/apache/hc/core5/testing/SocksProxy.java    |   4 +-
 .../classic/LoggingBHttpClientConnection.java      |  14 +-
 .../classic/LoggingBHttpServerConnection.java      |  14 +-
 .../framework/ClassicTestClientAdapter.java        |  17 +-
 .../hc/core5/testing/framework/FrameworkTest.java  |   6 +-
 .../framework/TestingFrameworkRequestHandler.java  |  20 +-
 .../core5/testing/nio/LoggingH2StreamListener.java |   8 +-
 .../testing/nio/LoggingHttp1StreamListener.java    |  13 +-
 .../testing/classic/ClassicTLSIntegrationTest.java |   2 +-
 .../compatibility/http2/H2CompatibilityTest.java   |   2 +-
 .../testing/framework/TestTestingFramework.java    |   5 +-
 .../hc/core5/testing/nio/H2IntegrationTest.java    | 161 ++++++------
 .../hc/core5/testing/nio/Http1IntegrationTest.java |   8 +-
 .../hc/core5/testing/nio/TLSIntegrationTest.java   |   8 +-
 .../java/org/apache/hc/core5/http/ContentType.java |   4 +-
 .../java/org/apache/hc/core5/http/HttpVersion.java |   6 +-
 .../http/impl/EnglishReasonPhraseCatalog.java      |   2 +-
 .../http/impl/bootstrap/AsyncServerBootstrap.java  |   4 +-
 .../hc/core5/http/impl/bootstrap/HttpServer.java   |   7 +-
 .../core5/http/impl/io/AbstractMessageParser.java  |   3 +-
 .../hc/core5/http/impl/io/ChunkedOutputStream.java |   3 +-
 .../http/impl/io/SessionOutputBufferImpl.java      |   2 +-
 .../hc/core5/http/impl/nio/ChunkEncoder.java       |   3 +-
 .../http/impl/nio/SessionOutputBufferImpl.java     |   2 +-
 .../hc/core5/http/io/entity/EntityUtils.java       |  14 +-
 .../hc/core5/http/io/entity/HttpEntities.java      |   9 +-
 .../hc/core5/http/message/BasicHeaderElement.java  |  11 +-
 .../apache/hc/core5/http/message/HeaderGroup.java  | 288 +++++++++------------
 .../http/nio/entity/AsyncEntityProducers.java      |   8 +-
 .../hc/core5/http/nio/ssl/FixedPortStrategy.java   |   8 +-
 .../hc/core5/http/protocol/ChainBuilder.java       |  17 +-
 .../hc/core5/http/protocol/HttpDateGenerator.java  |   2 +-
 .../java/org/apache/hc/core5/http/ssl/TLS.java     |  30 ++-
 .../org/apache/hc/core5/http/ssl/TlsCiphers.java   |  26 +-
 .../core5/http/support/AbstractRequestBuilder.java |   5 +-
 .../java/org/apache/hc/core5/net/URIBuilder.java   |  16 +-
 .../java/org/apache/hc/core5/pool/LaxConnPool.java |  21 +-
 .../org/apache/hc/core5/pool/StrictConnPool.java   |  22 +-
 .../hc/core5/reactor/AbstractIOSessionPool.java    |   8 +-
 .../hc/core5/reactor/MultiCoreIOReactor.java       |  24 +-
 .../hc/core5/reactor/SingleCoreIOReactor.java      |  12 +-
 .../org/apache/hc/core5/ssl/SSLContextBuilder.java |   9 +-
 .../java/org/apache/hc/core5/util/TextUtils.java   |   4 +-
 .../java/org/apache/hc/core5/util/VersionInfo.java |  25 +-
 .../hc/core5/http/ReadableByteChannelMock.java     |   6 +-
 .../AsyncPipelinedRequestExecutionExample.java     |  12 +-
 .../examples/AsyncRequestExecutionExample.java     |  12 +-
 .../http/examples/AsyncReverseProxyExample.java    |  11 +-
 .../http/examples/ClassicGetExecutionExample.java  |   5 +-
 .../http/examples/ClassicPostExecutionExample.java |   4 +-
 .../http/examples/ClassicReverseProxyExample.java  |  12 +-
 .../hc/core5/http/examples/PrintVersionInfo.java   |  13 +-
 .../http/impl/TestEnglishReasonPhraseCatalog.java  |   4 +-
 .../http/impl/io/TestIdentityInputStream.java      |   8 +-
 .../http/impl/io/TestIdentityOutputStream.java     |   2 +-
 .../http/impl/io/TestSessionInOutBuffers.java      |   5 +-
 .../http/impl/nio/TestSessionInOutBuffers.java     |   5 +-
 .../hc/core5/http/io/entity/TestEntityUtils.java   |   5 +-
 .../hc/core5/http/io/entity/TestStringEntity.java  |   5 +-
 .../message/TestBasicHeaderElementIterator.java    |   6 +-
 .../http/message/TestBasicHeaderIterator.java      |   8 +-
 .../message/TestBasicHeaderValueFormatter.java     |  10 +-
 .../core5/http/message/TestBasicTokenIterator.java |  12 +-
 .../http/protocol/TestStandardInterceptors.java    |   2 +-
 .../java/org/apache/hc/core5/http/ssl/TLSTest.java |   3 +-
 .../apache/hc/core5/http/ssl/TestTlsCiphers.java   |   6 +-
 .../hc/core5/http/ssl/TestTlsVersionParser.java    |  10 +-
 .../java/org/apache/hc/core5/util/TestArgs.java    |   2 +-
 .../apache/hc/core5/util/TestByteArrayBuffer.java  |  10 +-
 .../apache/hc/core5/util/TestCharArrayBuffer.java  |  10 +-
 93 files changed, 511 insertions(+), 791 deletions(-)


[httpcomponents-core] 01/02: Add and use TLS accessor methods to use lambdas from httpclient5 later

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git

commit 57f1fe8aef5a42098d659a467f3bfc5e74693d67
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Sep 27 11:04:17 2022 -0400

    Add and use TLS accessor methods to use lambdas from httpclient5 later
---
 .../testing/classic/ClassicTLSIntegrationTest.java   |  2 +-
 .../hc/core5/testing/nio/TLSIntegrationTest.java     |  8 ++++----
 .../main/java/org/apache/hc/core5/http/ssl/TLS.java  | 20 ++++++++++++++++++++
 .../hc/core5/http/ssl/TestTlsVersionParser.java      | 10 +++++-----
 4 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/classic/ClassicTLSIntegrationTest.java b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/classic/ClassicTLSIntegrationTest.java
index 54529e3d3..4b48aa6d4 100644
--- a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/classic/ClassicTLSIntegrationTest.java
+++ b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/classic/ClassicTLSIntegrationTest.java
@@ -141,7 +141,7 @@ public class ClassicTLSIntegrationTest {
 
         final SSLSession sslSession = sslSessionRef.getAndSet(null);
         final ProtocolVersion tlsVersion = TLS.parse(sslSession.getProtocol());
-        assertThat(tlsVersion.greaterEquals(TLS.V_1_2.version), CoreMatchers.equalTo(true));
+        assertThat(tlsVersion.greaterEquals(TLS.V_1_2.getVersion()), CoreMatchers.equalTo(true));
         assertThat(sslSession.getPeerPrincipal().getName(),
                 CoreMatchers.equalTo("CN=localhost,OU=Apache HttpComponents,O=Apache Software Foundation"));
     }
diff --git a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/TLSIntegrationTest.java b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/TLSIntegrationTest.java
index 09c401cae..cef309fe2 100644
--- a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/TLSIntegrationTest.java
+++ b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/TLSIntegrationTest.java
@@ -206,13 +206,13 @@ public class TLSIntegrationTest {
     public void testTLSSuccess(final TLS tlsProtocol) throws Exception {
         final TlsStrategy serverTlsStrategy = new TestTlsStrategy(
                 SSLTestContexts.createServerSSLContext(),
-                (endpoint, sslEngine) -> sslEngine.setEnabledProtocols(new String[]{tlsProtocol.id}),
+                (endpoint, sslEngine) -> sslEngine.setEnabledProtocols(new String[]{tlsProtocol.getId()}),
                 null);
         server = createServer(serverTlsStrategy);
         server.start();
 
         final TlsStrategy clientTlsStrategy = new TestTlsStrategy(SSLTestContexts.createClientSSLContext(),
-                (endpoint, sslEngine) -> sslEngine.setEnabledProtocols(new String[]{tlsProtocol.id}),
+                (endpoint, sslEngine) -> sslEngine.setEnabledProtocols(new String[]{tlsProtocol.getId()}),
                 null);
         client = createClient(clientTlsStrategy);
         client.start();
@@ -336,7 +336,7 @@ public class TLSIntegrationTest {
         final TlsStrategy serverTlsStrategy = new TestTlsStrategy(
                 SSLTestContexts.createServerSSLContext(),
                 (endpoint, sslEngine) -> {
-                    sslEngine.setEnabledProtocols(new String[]{TLS.V_1_0.id});
+                    sslEngine.setEnabledProtocols(new String[]{TLS.V_1_0.getId()});
                     sslEngine.setEnabledCipherSuites(new String[]{
                             "TLS_RSA_WITH_AES_256_CBC_SHA",
                             "TLS_RSA_WITH_AES_128_CBC_SHA",
@@ -348,7 +348,7 @@ public class TLSIntegrationTest {
 
         final TlsStrategy clientTlsStrategy = new BasicClientTlsStrategy(
                 SSLTestContexts.createClientSSLContext(),
-                (endpoint, sslEngine) -> sslEngine.setEnabledProtocols(new String[]{TLS.V_1_2.id}),
+                (endpoint, sslEngine) -> sslEngine.setEnabledProtocols(new String[]{TLS.V_1_2.getId()}),
                 null);
         client = createClient(clientTlsStrategy);
         client.start();
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java b/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java
index bf41091ad..d1884f146 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java
@@ -62,6 +62,26 @@ public enum TLS {
         return version.isComparable(protocolVersion);
     }
 
+    /**
+     * Gets the ID.
+     * @return the ID.
+     *
+     * @since 5.2
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * Gets the version.
+     * @return the version.
+     *
+     * @since 5.2
+     */
+    public ProtocolVersion getVersion() {
+        return version;
+    }
+
     public boolean greaterEquals(final ProtocolVersion protocolVersion) {
         return version.greaterEquals(protocolVersion);
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsVersionParser.java b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsVersionParser.java
index 307d018b3..39d393bed 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsVersionParser.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsVersionParser.java
@@ -51,10 +51,10 @@ public class TestTlsVersionParser {
 
     @Test
     public void testParseBasic() throws Exception {
-        assertThat(impl.parse("TLSv1"), CoreMatchers.equalTo(TLS.V_1_0.version));
-        assertThat(impl.parse("TLSv1.1"), CoreMatchers.equalTo(TLS.V_1_1.version));
-        assertThat(impl.parse("TLSv1.2"), CoreMatchers.equalTo(TLS.V_1_2.version));
-        assertThat(impl.parse("TLSv1.3"), CoreMatchers.equalTo(TLS.V_1_3.version));
+        assertThat(impl.parse("TLSv1"), CoreMatchers.equalTo(TLS.V_1_0.getVersion()));
+        assertThat(impl.parse("TLSv1.1"), CoreMatchers.equalTo(TLS.V_1_1.getVersion()));
+        assertThat(impl.parse("TLSv1.2"), CoreMatchers.equalTo(TLS.V_1_2.getVersion()));
+        assertThat(impl.parse("TLSv1.3"), CoreMatchers.equalTo(TLS.V_1_3.getVersion()));
         assertThat(impl.parse("TLSv22.356"), CoreMatchers.equalTo(new ProtocolVersion("TLS", 22, 356)));
     }
 
@@ -62,7 +62,7 @@ public class TestTlsVersionParser {
     public void testParseBuffer() throws Exception {
         final Tokenizer.Cursor cursor = new Tokenizer.Cursor(1, 13);
         assertThat(impl.parse(" TLSv1.2,0000", cursor, Tokenizer.INIT_BITSET(',')),
-                CoreMatchers.equalTo(TLS.V_1_2.version));
+                CoreMatchers.equalTo(TLS.V_1_2.getVersion()));
         assertThat(cursor.getPos(), CoreMatchers.equalTo(8));
     }
 


[httpcomponents-core] 02/02: Use Java 8 features and APIs

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git

commit cf27cce26fa6d599f189021bdd1b181c91629b41
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Sep 28 00:36:01 2022 -0400

    Use Java 8 features and APIs
---
 .../apache/hc/core5/http2/hpack/HPackEncoder.java  |   7 +-
 .../http2/impl/DefaultH2RequestConverter.java      |   4 +-
 .../http2/impl/DefaultH2ResponseConverter.java     |   4 +-
 .../impl/nio/AbstractH2StreamMultiplexer.java      |  46 +---
 .../http2/impl/nio/ClientH2PrefaceHandler.java     |   2 +-
 .../http2/impl/nio/ServerH2PrefaceHandler.java     |   4 +-
 .../H2MultiplexingRequesterBootstrap.java          |   4 +-
 .../impl/nio/bootstrap/H2RequesterBootstrap.java   |   4 +-
 .../impl/nio/bootstrap/H2ServerBootstrap.java      |   4 +-
 .../core5/http2/nio/support/BasicPingHandler.java  |   6 +-
 .../H2ConscriptRequestExecutionExample.java        |  16 +-
 .../core5/http2/examples/H2FileServerExample.java  |   8 +-
 .../http2/examples/H2FullDuplexClientExample.java  |   8 +-
 .../http2/examples/H2FullDuplexServerExample.java  |   8 +-
 .../examples/H2MultiStreamExecutionExample.java    |  19 +-
 .../http2/examples/H2RequestExecutionExample.java  |  10 +-
 .../examples/H2TlsAlpnRequestExecutionExample.java |  19 +-
 .../examples/H2ViaHttp1ProxyExecutionExample.java  |  19 +-
 .../core5/http2/frame/TestDefaultFrameFactory.java |   2 +-
 .../hc/core5/http2/hpack/TestHPackCoding.java      |   4 +-
 .../hc/core5/reactive/ReactiveDataProducer.java    |   6 +-
 .../examples/ReactiveFullDuplexClientExample.java  |   6 +-
 .../apache/hc/core5/benchmark/HttpBenchmark.java   |  27 +-
 .../org/apache/hc/core5/testing/SocksProxy.java    |   4 +-
 .../classic/LoggingBHttpClientConnection.java      |  14 +-
 .../classic/LoggingBHttpServerConnection.java      |  14 +-
 .../framework/ClassicTestClientAdapter.java        |  17 +-
 .../hc/core5/testing/framework/FrameworkTest.java  |   6 +-
 .../framework/TestingFrameworkRequestHandler.java  |  20 +-
 .../core5/testing/nio/LoggingH2StreamListener.java |   8 +-
 .../testing/nio/LoggingHttp1StreamListener.java    |  13 +-
 .../compatibility/http2/H2CompatibilityTest.java   |   2 +-
 .../testing/framework/TestTestingFramework.java    |   5 +-
 .../hc/core5/testing/nio/H2IntegrationTest.java    | 161 ++++++------
 .../hc/core5/testing/nio/Http1IntegrationTest.java |   8 +-
 .../java/org/apache/hc/core5/http/ContentType.java |   4 +-
 .../java/org/apache/hc/core5/http/HttpVersion.java |   6 +-
 .../http/impl/EnglishReasonPhraseCatalog.java      |   2 +-
 .../http/impl/bootstrap/AsyncServerBootstrap.java  |   4 +-
 .../hc/core5/http/impl/bootstrap/HttpServer.java   |   7 +-
 .../core5/http/impl/io/AbstractMessageParser.java  |   3 +-
 .../hc/core5/http/impl/io/ChunkedOutputStream.java |   3 +-
 .../http/impl/io/SessionOutputBufferImpl.java      |   2 +-
 .../hc/core5/http/impl/nio/ChunkEncoder.java       |   3 +-
 .../http/impl/nio/SessionOutputBufferImpl.java     |   2 +-
 .../hc/core5/http/io/entity/EntityUtils.java       |  14 +-
 .../hc/core5/http/io/entity/HttpEntities.java      |   9 +-
 .../hc/core5/http/message/BasicHeaderElement.java  |  11 +-
 .../apache/hc/core5/http/message/HeaderGroup.java  | 288 +++++++++------------
 .../http/nio/entity/AsyncEntityProducers.java      |   8 +-
 .../hc/core5/http/nio/ssl/FixedPortStrategy.java   |   8 +-
 .../hc/core5/http/protocol/ChainBuilder.java       |  17 +-
 .../hc/core5/http/protocol/HttpDateGenerator.java  |   2 +-
 .../java/org/apache/hc/core5/http/ssl/TLS.java     |  10 +-
 .../org/apache/hc/core5/http/ssl/TlsCiphers.java   |  26 +-
 .../core5/http/support/AbstractRequestBuilder.java |   5 +-
 .../java/org/apache/hc/core5/net/URIBuilder.java   |  16 +-
 .../java/org/apache/hc/core5/pool/LaxConnPool.java |  21 +-
 .../org/apache/hc/core5/pool/StrictConnPool.java   |  22 +-
 .../hc/core5/reactor/AbstractIOSessionPool.java    |   8 +-
 .../hc/core5/reactor/MultiCoreIOReactor.java       |  24 +-
 .../hc/core5/reactor/SingleCoreIOReactor.java      |  12 +-
 .../org/apache/hc/core5/ssl/SSLContextBuilder.java |   9 +-
 .../java/org/apache/hc/core5/util/TextUtils.java   |   4 +-
 .../java/org/apache/hc/core5/util/VersionInfo.java |  25 +-
 .../hc/core5/http/ReadableByteChannelMock.java     |   6 +-
 .../AsyncPipelinedRequestExecutionExample.java     |  12 +-
 .../examples/AsyncRequestExecutionExample.java     |  12 +-
 .../http/examples/AsyncReverseProxyExample.java    |  11 +-
 .../http/examples/ClassicGetExecutionExample.java  |   5 +-
 .../http/examples/ClassicPostExecutionExample.java |   4 +-
 .../http/examples/ClassicReverseProxyExample.java  |  12 +-
 .../hc/core5/http/examples/PrintVersionInfo.java   |  13 +-
 .../http/impl/TestEnglishReasonPhraseCatalog.java  |   4 +-
 .../http/impl/io/TestIdentityInputStream.java      |   8 +-
 .../http/impl/io/TestIdentityOutputStream.java     |   2 +-
 .../http/impl/io/TestSessionInOutBuffers.java      |   5 +-
 .../http/impl/nio/TestSessionInOutBuffers.java     |   5 +-
 .../hc/core5/http/io/entity/TestEntityUtils.java   |   5 +-
 .../hc/core5/http/io/entity/TestStringEntity.java  |   5 +-
 .../message/TestBasicHeaderElementIterator.java    |   6 +-
 .../http/message/TestBasicHeaderIterator.java      |   8 +-
 .../message/TestBasicHeaderValueFormatter.java     |  10 +-
 .../core5/http/message/TestBasicTokenIterator.java |  12 +-
 .../http/protocol/TestStandardInterceptors.java    |   2 +-
 .../java/org/apache/hc/core5/http/ssl/TLSTest.java |   3 +-
 .../apache/hc/core5/http/ssl/TestTlsCiphers.java   |   6 +-
 .../java/org/apache/hc/core5/util/TestArgs.java    |   2 +-
 .../apache/hc/core5/util/TestByteArrayBuffer.java  |  10 +-
 .../apache/hc/core5/util/TestCharArrayBuffer.java  |  10 +-
 90 files changed, 481 insertions(+), 781 deletions(-)

diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/hpack/HPackEncoder.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/hpack/HPackEncoder.java
index b64b27a51..b2927be97 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/hpack/HPackEncoder.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/hpack/HPackEncoder.java
@@ -243,8 +243,7 @@ public final class HPackEncoder {
         if (entries == null || entries.isEmpty()) {
             return 0;
         }
-        for (int i = 0; i < entries.size(); i++) {
-            final HPackEntry entry = entries.get(i);
+        for (final HPackEntry entry : entries) {
             if (Objects.equals(value, entry.getHeader().getValue())) {
                 return entry.getIndex();
             }
@@ -303,8 +302,8 @@ public final class HPackEncoder {
     void encodeHeaders(
             final ByteArrayBuffer dst, final List<? extends Header> headers,
             final boolean noIndexing, final boolean useHuffman) throws CharacterCodingException {
-        for (int i = 0; i < headers.size(); i++) {
-            encodeHeader(dst, headers.get(i), noIndexing, useHuffman);
+        for (final Header header : headers) {
+            encodeHeader(dst, header, noIndexing, useHuffman);
         }
     }
 
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2RequestConverter.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2RequestConverter.java
index d8f2611c6..62a388a5d 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2RequestConverter.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2RequestConverter.java
@@ -148,9 +148,7 @@ public final class DefaultH2RequestConverter implements H2MessageConverter<HttpR
             throw new ProtocolException(ex.getMessage(), ex);
         }
         httpRequest.setPath(path);
-        for (int i = 0; i < messageHeaders.size(); i++) {
-            httpRequest.addHeader(messageHeaders.get(i));
-        }
+        messageHeaders.forEach(httpRequest::addHeader);
         return httpRequest;
     }
 
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2ResponseConverter.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2ResponseConverter.java
index 0b860be8b..82dd1d4d8 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2ResponseConverter.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/DefaultH2ResponseConverter.java
@@ -102,9 +102,7 @@ public class DefaultH2ResponseConverter implements H2MessageConverter<HttpRespon
         }
         final HttpResponse response = new BasicHttpResponse(statusCode, null);
         response.setVersion(HttpVersion.HTTP_2);
-        for (int i = 0; i < messageHeaders.size(); i++) {
-            response.addHeader(messageHeaders.get(i));
-        }
+        messageHeaders.forEach(response::addHeader);
         return response;
     }
 
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
index a6020d8d8..b9e0daf22 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
@@ -35,6 +35,7 @@ import java.util.Deque;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedDeque;
@@ -476,8 +477,7 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
             final int pendingOutputRequests = outputRequests.get();
             boolean outputPending = false;
             if (!streamMap.isEmpty() && connOutputWindow.get() > 0) {
-                for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-                    final Map.Entry<Integer, H2Stream> entry = it.next();
+                for (final Entry<Integer, H2Stream> entry : streamMap.entrySet()) {
                     final H2Stream stream = entry.getValue();
                     if (!stream.isLocalClosed()
                             && stream.getOutputWindow().get() > 0
@@ -523,9 +523,7 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
         }
         if (connState.compareTo(ConnectionHandshake.SHUTDOWN) >= 0) {
             if (!streamMap.isEmpty()) {
-                for (final H2Stream stream : streamMap.values()) {
-                    stream.releaseResources();
-                }
+                streamMap.values().forEach(H2Stream::releaseResources);
                 streamMap.clear();
             }
             ioSession.getLock().lock();
@@ -551,11 +549,8 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
                             "Timeout due to inactivity (" + timeout + ")");
         }
         commitFrame(goAway);
-        for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-            final Map.Entry<Integer, H2Stream> entry = it.next();
-            final H2Stream stream = entry.getValue();
-            stream.reset(new H2StreamResetException(H2Error.NO_ERROR, "Timeout due to inactivity (" + timeout + ")"));
-        }
+        streamMap.values().forEach(stream -> stream
+                .reset(new H2StreamResetException(H2Error.NO_ERROR, "Timeout due to inactivity (" + timeout + ")")));
         streamMap.clear();
     }
 
@@ -568,11 +563,7 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
                 break;
             }
         }
-        for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-            final Map.Entry<Integer, H2Stream> entry = it.next();
-            final H2Stream stream = entry.getValue();
-            stream.cancel();
-        }
+        streamMap.values().forEach(H2Stream::cancel);
         for (;;) {
             final Command command = ioSession.poll();
             if (command != null) {
@@ -596,11 +587,7 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
             if (command instanceof ShutdownCommand) {
                 final ShutdownCommand shutdownCommand = (ShutdownCommand) command;
                 if (shutdownCommand.getType() == CloseMode.IMMEDIATE) {
-                    for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-                        final Map.Entry<Integer, H2Stream> entry = it.next();
-                        final H2Stream stream = entry.getValue();
-                        stream.cancel();
-                    }
+                    streamMap.values().forEach(H2Stream::cancel);
                     streamMap.clear();
                     connState = ConnectionHandshake.SHUTDOWN;
                 } else {
@@ -671,11 +658,7 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
                     break;
                 }
             }
-            for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-                final Map.Entry<Integer, H2Stream> entry = it.next();
-                final H2Stream stream = entry.getValue();
-                stream.reset(cause);
-            }
+            streamMap.values().forEach(e -> e.reset(cause));
             streamMap.clear();
             if (!(cause instanceof ConnectionClosedException)) {
                 if (connState.compareTo(ConnectionHandshake.GRACEFUL_SHUTDOWN) <= 0) {
@@ -1005,11 +988,8 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
                     }
                     connState = streamMap.isEmpty() ? ConnectionHandshake.SHUTDOWN : ConnectionHandshake.GRACEFUL_SHUTDOWN;
                 } else {
-                    for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-                        final Map.Entry<Integer, H2Stream> entry = it.next();
-                        final H2Stream stream = entry.getValue();
-                        stream.reset(new H2StreamResetException(errorCode, "Connection terminated by the peer (" + errorCode + ")"));
-                    }
+                    streamMap.values().forEach(v -> v.reset(new H2StreamResetException(errorCode,
+                            "Connection terminated by the peer (" + errorCode + ")")));
                     streamMap.clear();
                     connState = ConnectionHandshake.SHUTDOWN;
                 }
@@ -1225,8 +1205,7 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
 
         if (delta != 0) {
             if (!streamMap.isEmpty()) {
-                for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-                    final Map.Entry<Integer, H2Stream> entry = it.next();
+                for (final Entry<Integer, H2Stream> entry : streamMap.entrySet()) {
                     final H2Stream stream = entry.getValue();
                     try {
                         updateOutputWindow(stream.getId(), stream.getOutputWindow(), delta);
@@ -1246,8 +1225,7 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
         initInputWinSize = localConfig.getInitialWindowSize();
 
         if (delta != 0 && !streamMap.isEmpty()) {
-            for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
-                final Map.Entry<Integer, H2Stream> entry = it.next();
+            for (final Entry<Integer, H2Stream> entry : streamMap.entrySet()) {
                 final H2Stream stream = entry.getValue();
                 try {
                     updateInputWindow(stream.getId(), stream.getInputWindow(), delta);
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientH2PrefaceHandler.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientH2PrefaceHandler.java
index 9730b3a38..36dc50afc 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientH2PrefaceHandler.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientH2PrefaceHandler.java
@@ -53,7 +53,7 @@ import org.apache.hc.core5.util.TextUtils;
 public class ClientH2PrefaceHandler extends PrefaceHandlerBase {
 
     // PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n
-    final static byte[] PREFACE = new byte[] {
+    final static byte[] PREFACE = {
             0x50, 0x52, 0x49, 0x20, 0x2a, 0x20, 0x48, 0x54, 0x54, 0x50,
             0x2f, 0x32, 0x2e, 0x30, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x4d,
             0x0d, 0x0a, 0x0d, 0x0a};
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerH2PrefaceHandler.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerH2PrefaceHandler.java
index 35c80c20a..1efbc9c3b 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerH2PrefaceHandler.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerH2PrefaceHandler.java
@@ -85,8 +85,8 @@ public class ServerH2PrefaceHandler extends PrefaceHandlerBase {
         }
         final ByteBuffer data = inBuf.data();
         if (data.remaining() >= PREFACE.length) {
-            for (int i = 0; i < PREFACE.length; i++) {
-                if (data.get() != PREFACE[i]) {
+            for (final byte element : PREFACE) {
+                if (data.get() != element) {
                     throw new ProtocolNegotiationException("Unexpected HTTP/2 preface");
                 }
             }
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2MultiplexingRequesterBootstrap.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2MultiplexingRequesterBootstrap.java
index 57cd21d63..23d5921ae 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2MultiplexingRequesterBootstrap.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2MultiplexingRequesterBootstrap.java
@@ -196,9 +196,7 @@ public class H2MultiplexingRequesterBootstrap {
 
     public H2MultiplexingRequester create() {
         final RequestHandlerRegistry<Supplier<AsyncPushConsumer>> registry = new RequestHandlerRegistry<>(uriPatternType);
-        for (final HandlerEntry<Supplier<AsyncPushConsumer>> entry: pushConsumerList) {
-            registry.register(entry.hostname, entry.uriPattern, entry.handler);
-        }
+        pushConsumerList.forEach(entry -> registry.register(entry.hostname, entry.uriPattern, entry.handler));
         final ClientH2StreamMultiplexerFactory http2StreamHandlerFactory = new ClientH2StreamMultiplexerFactory(
                 httpProcessor != null ? httpProcessor : H2Processors.client(),
                 new DefaultAsyncPushConsumerFactory(registry),
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java
index 8ea1490ef..adf19aa31 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java
@@ -310,9 +310,7 @@ public class H2RequesterBootstrap {
                 break;
         }
         final RequestHandlerRegistry<Supplier<AsyncPushConsumer>> registry = new RequestHandlerRegistry<>(uriPatternType);
-        for (final HandlerEntry<Supplier<AsyncPushConsumer>> entry: pushConsumerList) {
-            registry.register(entry.hostname, entry.uriPattern, entry.handler);
-        }
+        pushConsumerList.forEach(entry -> registry.register(entry.hostname, entry.uriPattern, entry.handler));
 
         final ClientH2StreamMultiplexerFactory http2StreamHandlerFactory = new ClientH2StreamMultiplexerFactory(
                 httpProcessor != null ? httpProcessor : H2Processors.client(),
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java
index d60f84276..b5806f8cd 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java
@@ -346,9 +346,7 @@ public class H2ServerBootstrap {
                 actualCanonicalHostName,
                 () -> lookupRegistry != null ? lookupRegistry :
                         UriPatternType.newMatcher(UriPatternType.URI_PATTERN));
-        for (final HandlerEntry<Supplier<AsyncServerExchangeHandler>> entry: handlerList) {
-            registry.register(entry.hostname, entry.uriPattern, entry.handler);
-        }
+        handlerList.forEach(entry -> registry.register(entry.hostname, entry.uriPattern, entry.handler));
 
         final HandlerFactory<AsyncServerExchangeHandler> handlerFactory;
         if (!filters.isEmpty()) {
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/support/BasicPingHandler.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/support/BasicPingHandler.java
index 9a52223d4..ba70fe85a 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/support/BasicPingHandler.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/support/BasicPingHandler.java
@@ -41,7 +41,7 @@ import org.apache.hc.core5.util.Args;
  */
 public class BasicPingHandler implements AsyncPingHandler {
 
-    private static final byte[] PING_MESSAGE = new byte[] {'*', '*', 'p', 'i', 'n', 'g', '*', '*'};
+    private static final byte[] PING_MESSAGE = {'*', '*', 'p', 'i', 'n', 'g', '*', '*'};
 
     private final Callback<Boolean> callback;
 
@@ -57,8 +57,8 @@ public class BasicPingHandler implements AsyncPingHandler {
     @Override
     public void consumeResponse(final ByteBuffer feedback) throws HttpException, IOException {
         boolean result = true;
-        for (int i = 0; i < PING_MESSAGE.length; i++) {
-            if (!feedback.hasRemaining() || PING_MESSAGE[i] != feedback.get()) {
+        for (final byte element : PING_MESSAGE) {
+            if (!feedback.hasRemaining() || element != feedback.get()) {
                 result = false;
                 break;
             }
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ConscriptRequestExecutionExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ConscriptRequestExecutionExample.java
index e33f4e248..7e81098d9 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ConscriptRequestExecutionExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ConscriptRequestExecutionExample.java
@@ -26,6 +26,7 @@
  */
 package org.apache.hc.core5.http2.examples;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
@@ -54,8 +55,7 @@ import org.apache.hc.core5.util.Timeout;
 import org.conscrypt.Conscrypt;
 
 /**
- * This example demonstrates how to execute HTTP/2 requests over TLS connections
- * with Java 1.7 or Java 1.8 and Conscrypt TLS library
+ * This example demonstrates how to execute HTTP/2 requests over TLS connections Java 8 and Conscrypt TLS library.
  */
 public class H2ConscriptRequestExecutionExample {
 
@@ -77,16 +77,12 @@ public class H2ConscriptRequestExecutionExample {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
@@ -114,9 +110,9 @@ public class H2ConscriptRequestExecutionExample {
         requester.start();
 
         final HttpHost target = new HttpHost("https", "nghttp2.org", 443);
-        final String[] requestUris = new String[] {"/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers"};
+        final List<String> requestUris = Arrays.asList("/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers");
 
-        final CountDownLatch latch = new CountDownLatch(requestUris.length);
+        final CountDownLatch latch = new CountDownLatch(requestUris.size());
         for (final String requestUri: requestUris) {
             final Future<AsyncClientEndpoint> future = requester.connect(target, Timeout.ofDays(5));
             final AsyncClientEndpoint clientEndpoint = future.get();
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FileServerExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FileServerExample.java
index c4d24f0e8..5a291d5d1 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FileServerExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FileServerExample.java
@@ -94,16 +94,12 @@ public class H2FileServerExample {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexClientExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexClientExample.java
index c75217509..8d716cf40 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexClientExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexClientExample.java
@@ -82,16 +82,12 @@ public class H2FullDuplexClientExample {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexServerExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexServerExample.java
index d09f09b8c..68448c89f 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexServerExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2FullDuplexServerExample.java
@@ -88,16 +88,12 @@ public class H2FullDuplexServerExample {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2MultiStreamExecutionExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2MultiStreamExecutionExample.java
index 2628387f3..9c60c81a0 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2MultiStreamExecutionExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2MultiStreamExecutionExample.java
@@ -26,6 +26,7 @@
  */
 package org.apache.hc.core5.http2.examples;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
@@ -76,16 +77,12 @@ public class H2MultiStreamExecutionExample {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
@@ -113,13 +110,13 @@ public class H2MultiStreamExecutionExample {
         requester.start();
 
         final HttpHost target = new HttpHost("nghttp2.org");
-        final String[] requestUris = new String[] {"/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers"};
+        final List<String> requestUris = Arrays.asList("/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers");
 
         final Future<AsyncClientEndpoint> future = requester.connect(target, Timeout.ofSeconds(5));
         final AsyncClientEndpoint clientEndpoint = future.get();
 
-        final CountDownLatch latch = new CountDownLatch(requestUris.length);
-        for (final String requestUri: requestUris) {
+        final CountDownLatch latch = new CountDownLatch(requestUris.size());
+        requestUris.forEach(requestUri ->
             clientEndpoint.execute(
                     AsyncRequestBuilder.get()
                             .setHttpHost(target)
@@ -149,8 +146,8 @@ public class H2MultiStreamExecutionExample {
                             System.out.println(requestUri + " cancelled");
                         }
 
-                    });
-        }
+                    })
+        );
 
         latch.await();
 
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2RequestExecutionExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2RequestExecutionExample.java
index 3653baeeb..f9adecca9 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2RequestExecutionExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2RequestExecutionExample.java
@@ -68,16 +68,12 @@ public class H2RequestExecutionExample {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
@@ -105,7 +101,7 @@ public class H2RequestExecutionExample {
         requester.start();
 
         final HttpHost target = new HttpHost("nghttp2.org");
-        final String[] requestUris = new String[] {"/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers"};
+        final String[] requestUris = {"/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers"};
 
         final CountDownLatch latch = new CountDownLatch(requestUris.length);
         for (final String requestUri: requestUris) {
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2TlsAlpnRequestExecutionExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2TlsAlpnRequestExecutionExample.java
index 5a67e0965..24187e482 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2TlsAlpnRequestExecutionExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2TlsAlpnRequestExecutionExample.java
@@ -65,28 +65,17 @@ public class H2TlsAlpnRequestExecutionExample {
 
         final HttpAsyncRequester requester = H2RequesterBootstrap.bootstrap()
                 .setH2Config(h2Config)
-                .setTlsStrategy(new H2ClientTlsStrategy(SSLContexts.createSystemDefault(), (endpoint, sslEngine) -> {
-                    // IMPORTANT uncomment the following line when running Java 9 or older
-                    // in order to avoid the illegal reflective access operation warning
-                    // ====
-                    // return new TlsDetails(sslEngine.getSession(), sslEngine.getApplicationProtocol());
-                    // ====
-                    return null;
-                }))
+                .setTlsStrategy(new H2ClientTlsStrategy(SSLContexts.createSystemDefault(), (endpoint, sslEngine) -> null))
                 .setStreamListener(new H2StreamListener() {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
@@ -114,7 +103,7 @@ public class H2TlsAlpnRequestExecutionExample {
         requester.start();
 
         final HttpHost target = new HttpHost("https", "nghttp2.org", 443);
-        final String[] requestUris = new String[] {"/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers"};
+        final String[] requestUris = {"/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers"};
 
         final CountDownLatch latch = new CountDownLatch(requestUris.length);
         for (final String requestUri: requestUris) {
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ViaHttp1ProxyExecutionExample.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ViaHttp1ProxyExecutionExample.java
index 6ebebc732..9fb49482e 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ViaHttp1ProxyExecutionExample.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/H2ViaHttp1ProxyExecutionExample.java
@@ -26,6 +26,7 @@
  */
 package org.apache.hc.core5.http2.examples;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -103,16 +104,12 @@ public class H2ViaHttp1ProxyExecutionExample {
 
                     @Override
                     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") << " + header));
                     }
 
                     @Override
                     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
-                        for (int i = 0; i < headers.size(); i++) {
-                            System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + headers.get(i));
-                        }
+                        headers.forEach(header -> System.out.println(connection.getRemoteAddress() + " (" + streamId + ") >> " + header));
                     }
 
                     @Override
@@ -187,11 +184,11 @@ public class H2ViaHttp1ProxyExecutionExample {
 
                 }));
 
-        final String[] requestUris = new String[] {"/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers"};
+        final List<String> requestUris = Arrays.asList("/httpbin/ip", "/httpbin/user-agent", "/httpbin/headers");
         final AsyncClientEndpoint endpoint = tunnelFuture.get(1, TimeUnit.MINUTES);
         try {
-            final CountDownLatch latch = new CountDownLatch(requestUris.length);
-            for (final String requestUri : requestUris) {
+            final CountDownLatch latch = new CountDownLatch(requestUris.size());
+            requestUris.forEach(requestUri ->
                 endpoint.execute(
                         new BasicRequestProducer(Method.GET, target, requestUri),
                         new BasicResponseConsumer<>(new StringAsyncEntityConsumer()),
@@ -218,8 +215,8 @@ public class H2ViaHttp1ProxyExecutionExample {
                                 latch.countDown();
                             }
 
-                        });
-            }
+                        })
+            );
 
             latch.await();
         } finally {
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/frame/TestDefaultFrameFactory.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/frame/TestDefaultFrameFactory.java
index 676744236..66d988aca 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/frame/TestDefaultFrameFactory.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/frame/TestDefaultFrameFactory.java
@@ -42,7 +42,7 @@ public class TestDefaultFrameFactory {
 
         final FrameFactory frameFactory = new DefaultFrameFactory();
 
-        final byte[] data = new byte[]{'a', 'b', 'c', 'd', 'e', 'f'};
+        final byte[] data = {'a', 'b', 'c', 'd', 'e', 'f'};
         final Frame<ByteBuffer> dataFrame = frameFactory.createData(23, ByteBuffer.wrap(data), true);
 
         Assertions.assertEquals(FrameType.DATA.value, dataFrame.getType());
diff --git a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/hpack/TestHPackCoding.java b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/hpack/TestHPackCoding.java
index 47dc1ce7f..27d06dd26 100644
--- a/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/hpack/TestHPackCoding.java
+++ b/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/hpack/TestHPackCoding.java
@@ -241,8 +241,8 @@ public class TestHPackCoding {
             if (j > 0) {
                 buffer.append("; ");
             }
-            for (int i = 0; i < raw.length; i++) {
-                buffer.append((char) raw[i]);
+            for (final int element : raw) {
+                buffer.append((char) element);
             }
         }
         return buffer.toString();
diff --git a/httpcore5-reactive/src/main/java/org/apache/hc/core5/reactive/ReactiveDataProducer.java b/httpcore5-reactive/src/main/java/org/apache/hc/core5/reactive/ReactiveDataProducer.java
index 61813caeb..871c13d3c 100644
--- a/httpcore5-reactive/src/main/java/org/apache/hc/core5/reactive/ReactiveDataProducer.java
+++ b/httpcore5-reactive/src/main/java/org/apache/hc/core5/reactive/ReactiveDataProducer.java
@@ -114,11 +114,7 @@ final class ReactiveDataProducer implements AsyncDataProducer, Subscriber<ByteBu
             return 1;
         } else {
             synchronized (buffers) {
-                int sum = 0;
-                for (final ByteBuffer buffer : buffers) {
-                    sum += buffer.remaining();
-                }
-                return sum;
+                return buffers.stream().mapToInt(ByteBuffer::remaining).sum();
             }
         }
     }
diff --git a/httpcore5-reactive/src/test/java/org/apache/hc/core5/reactive/examples/ReactiveFullDuplexClientExample.java b/httpcore5-reactive/src/test/java/org/apache/hc/core5/reactive/examples/ReactiveFullDuplexClientExample.java
index 8c87b5013..12716252f 100644
--- a/httpcore5-reactive/src/test/java/org/apache/hc/core5/reactive/examples/ReactiveFullDuplexClientExample.java
+++ b/httpcore5-reactive/src/test/java/org/apache/hc/core5/reactive/examples/ReactiveFullDuplexClientExample.java
@@ -33,9 +33,9 @@ import java.nio.ByteBuffer;
 import java.util.Random;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.ContentType;
-import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.HttpConnection;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpResponse;
@@ -118,9 +118,7 @@ public class ReactiveFullDuplexClientExample {
         final Message<HttpResponse, Publisher<ByteBuffer>> streamingResponse = consumer.getResponseFuture().get();
 
         System.out.println(streamingResponse.getHead());
-        for (final Header header : streamingResponse.getHead().getHeaders()) {
-            System.out.println(header);
-        }
+        Stream.of(streamingResponse.getHead().getHeaders()).forEach(System.out::println);
         System.out.println();
 
         Observable.fromPublisher(streamingResponse.getBody())
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java
index 5cda8b208..5fa0b90c6 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java
@@ -38,6 +38,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.Lock;
+import java.util.stream.Stream;
 
 import javax.net.ssl.SSLContext;
 
@@ -319,10 +320,7 @@ public class HttpBenchmark {
                     public void onRequestHead(final HttpConnection connection, final HttpRequest request) {
                         if (config.getVerbosity() >= 3) {
                             System.out.println(">> " + request.getMethod() + " " + request.getRequestUri());
-                            final Header[] headers = request.getHeaders();
-                            for (final Header header : headers) {
-                                System.out.println(">> " + header);
-                            }
+                            Stream.of(request.getHeaders()).forEach(header -> System.out.println(">> " + header));
                             System.out.println();
                         }
                     }
@@ -331,10 +329,7 @@ public class HttpBenchmark {
                     public void onResponseHead(final HttpConnection connection, final HttpResponse response) {
                         if (config.getVerbosity() >= 3) {
                             System.out.println("<< " + response.getCode() + " " + response.getReasonPhrase());
-                            final Header[] headers = response.getHeaders();
-                            for (final Header header : headers) {
-                                System.out.println("<< " + header);
-                            }
+                            Stream.of(response.getHeaders()).forEach(header -> System.out.println("<< " + header));
                             System.out.println();
                         }
                     }
@@ -354,9 +349,7 @@ public class HttpBenchmark {
                             final int streamId,
                             final List<? extends Header> headers) {
                         if (config.getVerbosity() >= 3) {
-                            for (final Header header : headers) {
-                                System.out.println("<< " + header);
-                            }
+                            headers.forEach(header -> System.out.println("<< " + header));
                             System.out.println();
                         }
                     }
@@ -367,9 +360,7 @@ public class HttpBenchmark {
                             final int streamId,
                             final List<? extends Header> headers) {
                         if (config.getVerbosity() >= 3) {
-                            for (final Header header : headers) {
-                                System.out.println(">> " + header);
-                            }
+                            headers.forEach(header -> System.out.println(">> " + header));
                             System.out.println();
                         }
                     }
@@ -475,8 +466,8 @@ public class HttpBenchmark {
 
         final long startTime = System.currentTimeMillis();
 
-        for (int i = 0; i < workers.length; i++) {
-            workers[i].execute();
+        for (final BenchmarkWorker worker : workers) {
+            worker.execute();
         }
 
         completionLatch.await(deadline, TimeUnit.MILLISECONDS);
@@ -487,8 +478,8 @@ public class HttpBenchmark {
 
         final long endTime = System.currentTimeMillis();
 
-        for (int i = 0; i < workers.length; i++) {
-            workers[i].releaseResources();
+        for (final BenchmarkWorker worker : workers) {
+            worker.releaseResources();
         }
 
         return new Results(
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/SocksProxy.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/SocksProxy.java
index 7d8234d8e..5f6824b61 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/SocksProxy.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/SocksProxy.java
@@ -256,9 +256,7 @@ public class SocksProxy {
                 t = this.serverThread;
                 this.serverThread = null;
             }
-            for (final SocksProxyHandler handler : this.handlers) {
-                handler.shutdown();
-            }
+            this.handlers.forEach(SocksProxyHandler::shutdown);
             while (!this.handlers.isEmpty()) {
                 final long waitTime = waitUntil - System.currentTimeMillis();
                 if (waitTime > 0) {
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java
index 7fcdd4afc..27ebe96b8 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java
@@ -32,11 +32,11 @@ import java.net.Socket;
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.ContentLengthStrategy;
-import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.config.Http1Config;
 import org.apache.hc.core5.http.impl.io.DefaultBHttpClientConnection;
 import org.apache.hc.core5.http.impl.io.SocketHolder;
@@ -46,8 +46,8 @@ import org.apache.hc.core5.http.message.RequestLine;
 import org.apache.hc.core5.http.message.StatusLine;
 import org.apache.hc.core5.io.CloseMode;
 import org.apache.hc.core5.util.Identifiable;
-import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class LoggingBHttpClientConnection extends DefaultBHttpClientConnection implements Identifiable {
 
@@ -109,10 +109,7 @@ public class LoggingBHttpClientConnection extends DefaultBHttpClientConnection i
     protected void onResponseReceived(final ClassicHttpResponse response) {
         if (response != null && this.headerLog.isDebugEnabled()) {
             this.headerLog.debug("{} << {}", this.id, new StatusLine(response));
-            final Header[] headers = response.getHeaders();
-            for (final Header header : headers) {
-                this.headerLog.debug("{} << {}", this.id, header);
-            }
+            Stream.of(response.getHeaders()).forEach(header -> this.headerLog.debug("{} << {}", this.id, header));
         }
     }
 
@@ -120,10 +117,7 @@ public class LoggingBHttpClientConnection extends DefaultBHttpClientConnection i
     protected void onRequestSubmitted(final ClassicHttpRequest request) {
         if (request != null && this.headerLog.isDebugEnabled()) {
             this.headerLog.debug("{} >> {}", id, new RequestLine(request));
-            final Header[] headers = request.getHeaders();
-            for (final Header header : headers) {
-                this.headerLog.debug("{} >> {}", this.id, header);
-            }
+            Stream.of(request.getHeaders()).forEach(header -> this.headerLog.debug("{} >> {}", this.id, header));
         }
     }
 
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java
index 94ed2f38e..bd64cdc5a 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java
@@ -32,11 +32,11 @@ import java.net.Socket;
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.ContentLengthStrategy;
-import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.config.Http1Config;
 import org.apache.hc.core5.http.impl.io.DefaultBHttpServerConnection;
 import org.apache.hc.core5.http.impl.io.SocketHolder;
@@ -46,8 +46,8 @@ import org.apache.hc.core5.http.message.RequestLine;
 import org.apache.hc.core5.http.message.StatusLine;
 import org.apache.hc.core5.io.CloseMode;
 import org.apache.hc.core5.util.Identifiable;
-import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 public class LoggingBHttpServerConnection extends DefaultBHttpServerConnection implements Identifiable {
 
     private static final AtomicLong COUNT = new AtomicLong();
@@ -109,10 +109,7 @@ public class LoggingBHttpServerConnection extends DefaultBHttpServerConnection i
     protected void onRequestReceived(final ClassicHttpRequest request) {
         if (request != null && this.headerLog.isDebugEnabled()) {
             this.headerLog.debug("{} >> {}", id, new RequestLine(request));
-            final Header[] headers = request.getHeaders();
-            for (final Header header : headers) {
-                this.headerLog.debug("{} >> {}", this.id, header);
-            }
+            Stream.of(request.getHeaders()).forEach(header -> this.headerLog.debug("{} >> {}", this.id, header));
         }
     }
 
@@ -120,10 +117,7 @@ public class LoggingBHttpServerConnection extends DefaultBHttpServerConnection i
     protected void onResponseSubmitted(final ClassicHttpResponse response) {
         if (response != null && this.headerLog.isDebugEnabled()) {
             this.headerLog.debug("{} << {}", this.id, new StatusLine(response));
-            final Header[] headers = response.getHeaders();
-            for (final Header header : headers) {
-                this.headerLog.debug("{} << {}", this.id, header);
-            }
+            Stream.of(response.getHeaders()).forEach(header -> this.headerLog.debug("{} << {}", this.id, header));
         }
     }
 
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/ClassicTestClientAdapter.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/ClassicTestClientAdapter.java
index 1c4b097c6..17e8c7556 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/ClassicTestClientAdapter.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/ClassicTestClientAdapter.java
@@ -30,7 +30,8 @@ package org.apache.hc.core5.testing.framework;
 import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Map.Entry;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.ContentType;
@@ -94,9 +95,7 @@ public class ClassicTestClientAdapter extends ClientPOJOAdapter {
             final StringBuilder newQuery = new StringBuilder(existingQuery == null ? "" : existingQuery);
 
             // append each parm to the query
-            for (final Entry<String, String> parm : queryMap.entrySet()) {
-                newQuery.append("&").append(parm.getKey()).append("=").append(parm.getValue());
-            }
+            queryMap.forEach((k, v) -> newQuery.append("&").append(k).append("=").append(v));
             // create a uri with the new query.
             uri = new URI(
                     startingURI.getRawSchemeSpecificPart(),
@@ -120,9 +119,7 @@ public class ClassicTestClientAdapter extends ClientPOJOAdapter {
         @SuppressWarnings("unchecked")
         final Map<String, String> headersMap = (Map<String, String>) request.get(HEADERS);
         if (headersMap != null) {
-            for (final Entry<String, String> header : headersMap.entrySet()) {
-                httpRequest.addHeader(header.getKey(), header.getValue());
-            }
+            headersMap.forEach(httpRequest::addHeader);
         }
 
         // call setEntity if a body is specified.
@@ -151,10 +148,8 @@ public class ClassicTestClientAdapter extends ClientPOJOAdapter {
             ret.put(STATUS, response.getCode());
 
             // convert the headers to a Map
-            final Map<String, Object> headerMap = new HashMap<>();
-            for (final Header header : response.getHeaders()) {
-                headerMap.put(header.getName(), header.getValue());
-            }
+            final Map<String, Object> headerMap = Stream.of(response.getHeaders())
+                    .collect(Collectors.toMap(Header::getName, Header::getValue));
             ret.put(HEADERS, headerMap);
             ret.put(BODY, body);
             ret.put(CONTENT_TYPE, contentType);
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/FrameworkTest.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/FrameworkTest.java
index 968548793..155870043 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/FrameworkTest.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/FrameworkTest.java
@@ -116,10 +116,8 @@ public class FrameworkTest {
                 final List<NameValuePair> params = uriBuilder.getQueryParams();
                 @SuppressWarnings("unchecked")
                 final Map<String, Object> queryMap = (Map<String, Object>) request.get(QUERY);
-                for (final NameValuePair param : params) {
-                    queryMap.put(param.getName(), param.getValue());
-                }
-                if (! params.isEmpty()) {
+                params.forEach(param -> queryMap.put(param.getName(), param.getValue()));
+                if (!params.isEmpty()) {
                     request.put(PATH, uri.getPath());
                 }
             }
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFrameworkRequestHandler.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFrameworkRequestHandler.java
index e757b6232..e7df6f71d 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFrameworkRequestHandler.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFrameworkRequestHandler.java
@@ -38,10 +38,11 @@ import static org.apache.hc.core5.testing.framework.ClientPOJOAdapter.STATUS;
 import java.io.IOException;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
@@ -139,10 +140,8 @@ public class TestingFrameworkRequestHandler implements HttpRequestHandler {
                 final URI uri = request.getUri();
                 final URIBuilder uriBuilder = new URIBuilder(uri, StandardCharsets.UTF_8);
                 final List<NameValuePair> actualParams = uriBuilder.getQueryParams();
-                final Map<String, String> actualParamsMap = new HashMap<>();
-                for (final NameValuePair actualParam : actualParams) {
-                    actualParamsMap.put(actualParam.getName(), actualParam.getValue());
-                }
+                final Map<String, String> actualParamsMap = actualParams.stream()
+                        .collect(Collectors.toMap(NameValuePair::getName, NameValuePair::getValue));
                 for (final Map.Entry<String, String> expectedParam : expectedQuery.entrySet()) {
                     final String key = expectedParam.getKey();
                     if (! actualParamsMap.containsKey(key)) {
@@ -163,11 +162,8 @@ public class TestingFrameworkRequestHandler implements HttpRequestHandler {
             @SuppressWarnings("unchecked")
             final Map<String, String> expectedHeaders = (Map<String, String>) requestExpectations.get(HEADERS);
             if (expectedHeaders != null) {
-                final Map<String, String> actualHeadersMap = new HashMap<>();
-                final Header[] actualHeaders = request.getHeaders();
-                for (final Header header : actualHeaders) {
-                    actualHeadersMap.put(header.getName(), header.getValue());
-                }
+                final Map<String, String> actualHeadersMap = Stream.of(request.getHeaders())
+                        .collect(Collectors.toMap(Header::getName, Header::getValue));
                 for (final Entry<String, String> expectedHeader : expectedHeaders.entrySet()) {
                     final String key = expectedHeader.getKey();
                     if (! actualHeadersMap.containsKey(key)) {
@@ -239,9 +235,7 @@ public class TestingFrameworkRequestHandler implements HttpRequestHandler {
             @SuppressWarnings("unchecked")
             final Map<String, String> desiredHeaders = (Map<String, String>) desiredResponse.get(HEADERS);
             if (desiredHeaders != null) {
-                for (final Entry<String, String> entry : desiredHeaders.entrySet()) {
-                    response.setHeader(entry.getKey(), entry.getValue());
-                }
+                desiredHeaders.forEach(response::setHeader);
             }
 
         } catch (final Throwable t) {
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java
index 8ef7d720a..bfd0736aa 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java
@@ -85,9 +85,7 @@ public class LoggingH2StreamListener implements H2StreamListener {
     public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
         if (headerLog.isDebugEnabled()) {
             final String prefix = LoggingSupport.getId(connection);
-            for (int i = 0; i < headers.size(); i++) {
-                headerLog.debug("{} << {}", prefix, headers.get(i));
-            }
+            headers.forEach(header -> headerLog.debug("{} << {}", prefix, header));
         }
     }
 
@@ -95,9 +93,7 @@ public class LoggingH2StreamListener implements H2StreamListener {
     public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
         if (headerLog.isDebugEnabled()) {
             final String prefix = LoggingSupport.getId(connection);
-            for (int i = 0; i < headers.size(); i++) {
-                headerLog.debug("{} >> {}", prefix, headers.get(i));
-            }
+            headers.forEach(header -> headerLog.debug("{} >> {}", prefix, header));
         }
     }
 
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingHttp1StreamListener.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingHttp1StreamListener.java
index 72796c2c7..98bee8370 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingHttp1StreamListener.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingHttp1StreamListener.java
@@ -27,9 +27,6 @@
 
 package org.apache.hc.core5.testing.nio;
 
-import java.util.Iterator;
-
-import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.HttpConnection;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpResponse;
@@ -37,8 +34,8 @@ import org.apache.hc.core5.http.impl.Http1StreamListener;
 import org.apache.hc.core5.http.message.RequestLine;
 import org.apache.hc.core5.http.message.StatusLine;
 import org.apache.hc.core5.testing.classic.LoggingSupport;
-import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class LoggingHttp1StreamListener implements Http1StreamListener {
 
@@ -62,9 +59,7 @@ public class LoggingHttp1StreamListener implements Http1StreamListener {
         if (headerLog.isDebugEnabled()) {
             final String idRequestDirection = LoggingSupport.getId(connection) + requestDirection;
             headerLog.debug("{}{}", idRequestDirection, new RequestLine(request));
-            for (final Iterator<Header> it = request.headerIterator(); it.hasNext(); ) {
-                headerLog.debug("{}{}", idRequestDirection, it.next());
-            }
+            request.headerIterator().forEachRemaining(h -> headerLog.debug("{}{}", idRequestDirection, h));
         }
     }
 
@@ -73,9 +68,7 @@ public class LoggingHttp1StreamListener implements Http1StreamListener {
         if (headerLog.isDebugEnabled()) {
             final String id = LoggingSupport.getId(connection);
             headerLog.debug("{}{}{}", id, responseDirection, new StatusLine(response));
-            for (final Iterator<Header> it = response.headerIterator(); it.hasNext(); ) {
-                headerLog.debug("{}{}{}", id, responseDirection, it.next());
-            }
+            response.headerIterator().forEachRemaining(h -> headerLog.debug("{}{}{}", id, responseDirection, h));
         }
     }
 
diff --git a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/compatibility/http2/H2CompatibilityTest.java b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/compatibility/http2/H2CompatibilityTest.java
index b82ad06bb..8c82a6c7e 100644
--- a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/compatibility/http2/H2CompatibilityTest.java
+++ b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/compatibility/http2/H2CompatibilityTest.java
@@ -77,7 +77,7 @@ public class H2CompatibilityTest {
 
     public static void main(final String... args) throws Exception {
 
-        final HttpHost[] h2servers = new HttpHost[]{
+        final HttpHost[] h2servers = {
                 new HttpHost("http", "localhost", 8080),
                 new HttpHost("http", "localhost", 8081)
         };
diff --git a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java
index dfb09be96..edcba516e 100644
--- a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java
+++ b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/framework/TestTestingFramework.java
@@ -885,9 +885,8 @@ public class TestTestingFramework {
 
         framework.runTests();
 
-        for (final String method : TestingFramework.ALL_METHODS) {
-            Assertions.assertTrue(calledMethodSet.contains(method), "Method not in default tests.  method=" + method);
-        }
+        TestingFramework.ALL_METHODS.forEach(method -> Assertions.assertTrue(calledMethodSet.contains(method),
+                "Method not in default tests.  method=" + method));
     }
 
     @Test
diff --git a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/H2IntegrationTest.java b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/H2IntegrationTest.java
index b41db879e..433d6ef4e 100644
--- a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/H2IntegrationTest.java
+++ b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/H2IntegrationTest.java
@@ -45,7 +45,6 @@ import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -60,8 +59,8 @@ import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 
-import org.apache.hc.core5.function.Supplier;
 import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.EndpointDetails;
 import org.apache.hc.core5.http.EntityDetails;
@@ -581,47 +580,40 @@ public class H2IntegrationTest extends InternalH2ServerTestBase {
     public void testPushRefused() throws Exception {
         final BlockingQueue<Exception> pushResultQueue = new LinkedBlockingDeque<>();
         final InetSocketAddress serverEndpoint = server.start();
-        server.register("/hello", new Supplier<AsyncServerExchangeHandler>() {
+        server.register("/hello", () -> new MessageExchangeHandler<Void>(new DiscardingEntityConsumer<>()) {
 
             @Override
-            public AsyncServerExchangeHandler get() {
-                return new MessageExchangeHandler<Void>(new DiscardingEntityConsumer<>()) {
+            protected void handle(
+                    final Message<HttpRequest, Void> request,
+                    final AsyncServerRequestHandler.ResponseTrigger responseTrigger,
+                    final HttpContext context) throws IOException, HttpException {
 
-                    @Override
-                    protected void handle(
-                            final Message<HttpRequest, Void> request,
-                            final AsyncServerRequestHandler.ResponseTrigger responseTrigger,
-                            final HttpContext context) throws IOException, HttpException {
-
-                        responseTrigger.pushPromise(
-                                new BasicHttpRequest(Method.GET, createRequestURI(serverEndpoint, "/stuff")),
-                                context, new BasicPushProducer(AsyncEntityProducers.create("Pushing all sorts of stuff")) {
-
-                            @Override
-                            public void failed(final Exception cause) {
-                                pushResultQueue.add(cause);
-                                super.failed(cause);
-                            }
+                responseTrigger.pushPromise(
+                        new BasicHttpRequest(Method.GET, createRequestURI(serverEndpoint, "/stuff")),
+                        context, new BasicPushProducer(AsyncEntityProducers.create("Pushing all sorts of stuff")) {
 
-                        });
-                        responseTrigger.pushPromise(
-                                new BasicHttpRequest(Method.GET, createRequestURI(serverEndpoint, "/more-stuff")),
-                                context, new BasicPushProducer(new MultiLineEntityProducer("Pushing lots of stuff", 500)) {
+                    @Override
+                    public void failed(final Exception cause) {
+                        pushResultQueue.add(cause);
+                        super.failed(cause);
+                    }
 
-                            @Override
-                            public void failed(final Exception cause) {
-                                pushResultQueue.add(cause);
-                                super.failed(cause);
-                            }
+                });
+                responseTrigger.pushPromise(
+                        new BasicHttpRequest(Method.GET, createRequestURI(serverEndpoint, "/more-stuff")),
+                        context, new BasicPushProducer(new MultiLineEntityProducer("Pushing lots of stuff", 500)) {
 
-                        });
-                        responseTrigger.submitResponse(
-                                new BasicResponseProducer(HttpStatus.SC_OK, AsyncEntityProducers.create("Hi there")),
-                                context);
+                    @Override
+                    public void failed(final Exception cause) {
+                        pushResultQueue.add(cause);
+                        super.failed(cause);
                     }
-                };
-            }
 
+                });
+                responseTrigger.submitResponse(
+                        new BasicResponseProducer(HttpStatus.SC_OK, AsyncEntityProducers.create("Hi there")),
+                        context);
+            }
         });
 
         client.start(H2Config.custom().setPushEnabled(true).build());
@@ -738,66 +730,59 @@ public class H2IntegrationTest extends InternalH2ServerTestBase {
 
     @Test
     public void testPrematureResponse() throws Exception {
-        server.register("*", new Supplier<AsyncServerExchangeHandler>() {
+        server.register("*", () -> new AsyncServerExchangeHandler() {
 
-            @Override
-            public AsyncServerExchangeHandler get() {
-                return new AsyncServerExchangeHandler() {
-
-                    private final AtomicReference<AsyncResponseProducer> responseProducer = new AtomicReference<>();
-
-                    @Override
-                    public void updateCapacity(final CapacityChannel capacityChannel) throws IOException {
-                        capacityChannel.update(Integer.MAX_VALUE);
-                    }
+            private final AtomicReference<AsyncResponseProducer> responseProducer = new AtomicReference<>();
 
-                    @Override
-                    public void consume(final ByteBuffer src) throws IOException {
-                    }
+            @Override
+            public void updateCapacity(final CapacityChannel capacityChannel) throws IOException {
+                capacityChannel.update(Integer.MAX_VALUE);
+            }
 
-                    @Override
-                    public void streamEnd(final List<? extends Header> trailers) throws HttpException, IOException {
-                    }
+            @Override
+            public void consume(final ByteBuffer src) throws IOException {
+            }
 
-                    @Override
-                    public void handleRequest(
-                            final HttpRequest request,
-                            final EntityDetails entityDetails,
-                            final ResponseChannel responseChannel,
-                            final HttpContext context) throws HttpException, IOException {
-                        final AsyncResponseProducer producer;
-                        final Header h = request.getFirstHeader("password");
-                        if (h != null && "secret".equals(h.getValue())) {
-                            producer = new BasicResponseProducer(HttpStatus.SC_OK, "All is well");
-                        } else {
-                            producer = new BasicResponseProducer(HttpStatus.SC_UNAUTHORIZED, "You shall not pass");
-                        }
-                        responseProducer.set(producer);
-                        producer.sendResponse(responseChannel, context);
-                    }
+            @Override
+            public void streamEnd(final List<? extends Header> trailers) throws HttpException, IOException {
+            }
 
-                    @Override
-                    public int available() {
-                        final AsyncResponseProducer producer = this.responseProducer.get();
-                        return producer.available();
-                    }
+            @Override
+            public void handleRequest(
+                    final HttpRequest request,
+                    final EntityDetails entityDetails,
+                    final ResponseChannel responseChannel,
+                    final HttpContext context) throws HttpException, IOException {
+                final AsyncResponseProducer producer;
+                final Header h = request.getFirstHeader("password");
+                if (h != null && "secret".equals(h.getValue())) {
+                    producer = new BasicResponseProducer(HttpStatus.SC_OK, "All is well");
+                } else {
+                    producer = new BasicResponseProducer(HttpStatus.SC_UNAUTHORIZED, "You shall not pass");
+                }
+                responseProducer.set(producer);
+                producer.sendResponse(responseChannel, context);
+            }
 
-                    @Override
-                    public void produce(final DataStreamChannel channel) throws IOException {
-                        final AsyncResponseProducer producer = this.responseProducer.get();
-                        producer.produce(channel);
-                    }
+            @Override
+            public int available() {
+                final AsyncResponseProducer producer = this.responseProducer.get();
+                return producer.available();
+            }
 
-                    @Override
-                    public void failed(final Exception cause) {
-                    }
+            @Override
+            public void produce(final DataStreamChannel channel) throws IOException {
+                final AsyncResponseProducer producer = this.responseProducer.get();
+                producer.produce(channel);
+            }
 
-                    @Override
-                    public void releaseResources() {
-                    }
-                };
+            @Override
+            public void failed(final Exception cause) {
             }
 
+            @Override
+            public void releaseResources() {
+            }
         });
         final InetSocketAddress serverEndpoint = server.start();
 
@@ -864,10 +849,8 @@ public class H2IntegrationTest extends InternalH2ServerTestBase {
         final List<Header> trailers = entityConsumer.getTrailers();
         Assertions.assertNotNull(trailers);
         Assertions.assertEquals(2, trailers.size());
-        final Map<String, String> map = new HashMap<>();
-        for (final Header header: trailers) {
-            map.put(TextUtils.toLowerCase(header.getName()), header.getValue());
-        }
+        final Map<String, String> map = trailers.stream()
+                .collect(Collectors.toMap(h -> TextUtils.toLowerCase(h.getName()), Header::getValue));
         final String digest = TextUtils.toHexString(entityConsumer.getDigest());
         Assertions.assertEquals("MD5", map.get("digest-algo"));
         Assertions.assertEquals(digest, map.get("digest"));
diff --git a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/Http1IntegrationTest.java b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/Http1IntegrationTest.java
index 4f4cdc59e..ee3c48bc8 100644
--- a/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/Http1IntegrationTest.java
+++ b/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/Http1IntegrationTest.java
@@ -46,7 +46,6 @@ import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -58,6 +57,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 
 import org.apache.hc.core5.http.ConnectionReuseStrategy;
 import org.apache.hc.core5.http.ContentLengthStrategy;
@@ -1622,10 +1622,8 @@ public class Http1IntegrationTest extends InternalHttp1ServerTestBase {
         final List<Header> trailers = entityConsumer.getTrailers();
         Assertions.assertNotNull(trailers);
         Assertions.assertEquals(2, trailers.size());
-        final Map<String, String> map = new HashMap<>();
-        for (final Header header: trailers) {
-            map.put(TextUtils.toLowerCase(header.getName()), header.getValue());
-        }
+        final Map<String, String> map = trailers.stream()
+                .collect(Collectors.toMap(h -> TextUtils.toLowerCase(h.getName()), Header::getValue));
         final String digest = TextUtils.toHexString(entityConsumer.getDigest());
         Assertions.assertEquals("MD5", map.get("digest-algo"));
         Assertions.assertEquals(digest, map.get("digest"));
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/ContentType.java b/httpcore5/src/main/java/org/apache/hc/core5/http/ContentType.java
index 4fae21c47..7a17d7228 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/ContentType.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/ContentType.java
@@ -505,9 +505,7 @@ public final class ContentType implements Serializable {
         if (this.charset != null && !paramMap.containsKey(CHARSET)) {
             newParams.add(new BasicNameValuePair(CHARSET, this.charset.name()));
         }
-        for (final Map.Entry<String, String> entry: paramMap.entrySet()) {
-            newParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
-        }
+        paramMap.forEach((k, v) -> newParams.add(new BasicNameValuePair(k, v)));
         return create(this.getMimeType(), newParams.toArray(EMPTY_NAME_VALUE_PAIR_ARRAY), true);
     }
 
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/HttpVersion.java b/httpcore5/src/main/java/org/apache/hc/core5/http/HttpVersion.java
index c9a3b1082..77a4aec4f 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/HttpVersion.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/HttpVersion.java
@@ -80,9 +80,9 @@ public final class HttpVersion extends ProtocolVersion {
      * @since 5.0
      */
     public static HttpVersion get(final int major, final int minor) {
-        for (int i = 0; i < ALL.length; i++) {
-            if (ALL[i].equals(major, minor)) {
-                return ALL[i];
+        for (final HttpVersion element : ALL) {
+            if (element.equals(major, minor)) {
+                return element;
             }
         }
         // argument checking is done in the constructor
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/EnglishReasonPhraseCatalog.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/EnglishReasonPhraseCatalog.java
index 597c9a306..6485c018f 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/EnglishReasonPhraseCatalog.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/EnglishReasonPhraseCatalog.java
@@ -86,7 +86,7 @@ public class EnglishReasonPhraseCatalog implements ReasonPhraseCatalog {
 
 
     /** Reason phrases lookup table. */
-    private static final String[][] REASON_PHRASES = new String[][]{
+    private static final String[][] REASON_PHRASES = {
         null,
         new String[4],  // 1xx
         new String[27], // 2xx
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java
index dfbe1fabe..da03db1e3 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java
@@ -323,9 +323,7 @@ public class AsyncServerBootstrap {
                 canonicalHostName != null ? canonicalHostName : InetAddressUtils.getCanonicalLocalHostName(),
                 () -> lookupRegistry != null ? lookupRegistry :
                         UriPatternType.newMatcher(UriPatternType.URI_PATTERN));
-        for (final HandlerEntry<Supplier<AsyncServerExchangeHandler>> entry: handlerList) {
-            registry.register(entry.hostname, entry.uriPattern, entry.handler);
-        }
+        handlerList.forEach(entry -> registry.register(entry.hostname, entry.uriPattern, entry.handler));
 
         final HandlerFactory<AsyncServerExchangeHandler> handlerFactory;
         if (!filters.isEmpty()) {
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java
index 410d6bed2..364c82cc3 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java
@@ -29,7 +29,6 @@ package org.apache.hc.core5.http.impl.bootstrap;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.ServerSocket;
-import java.util.Set;
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
@@ -206,10 +205,8 @@ public class HttpServer implements ModalCloseable {
                 Thread.currentThread().interrupt();
             }
         }
-        final Set<Worker> workers = this.workerExecutorService.getWorkers();
-        for (final Worker worker: workers) {
-            Closer.close(worker.getConnection(), CloseMode.GRACEFUL);
-        }
+        this.workerExecutorService.getWorkers()
+                .forEach(worker -> Closer.close(worker.getConnection(), CloseMode.GRACEFUL));
     }
 
     @Override
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/AbstractMessageParser.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/AbstractMessageParser.java
index 43329b2ce..0f2df58e7 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/AbstractMessageParser.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/AbstractMessageParser.java
@@ -199,8 +199,7 @@ public abstract class AbstractMessageParser<T extends HttpMessage> implements Ht
         }
         final Header[] headers = new Header[headerLines.size()];
         for (int i = 0; i < headerLines.size(); i++) {
-            final CharArrayBuffer buffer = headerLines.get(i);
-            headers[i] = parser.parseHeader(buffer);
+            headers[i] = parser.parseHeader(headerLines.get(i));
         }
         return headers;
     }
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/ChunkedOutputStream.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/ChunkedOutputStream.java
index b7d9faf4c..347def627 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/ChunkedOutputStream.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/ChunkedOutputStream.java
@@ -159,8 +159,7 @@ public class ChunkedOutputStream extends OutputStream {
     private void writeTrailers() throws IOException {
         final List<? extends Header> trailers = this.trailerSupplier != null ? this.trailerSupplier.get() : null;
         if (trailers != null) {
-            for (int i = 0; i < trailers.size(); i++) {
-                final Header header = trailers.get(i);
+            for (final Header header : trailers) {
                 if (header instanceof FormattedHeader) {
                     final CharArrayBuffer chbuffer = ((FormattedHeader) header).getBuffer();
                     this.buffer.writeLine(chbuffer, this.outputStream);
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/SessionOutputBufferImpl.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/SessionOutputBufferImpl.java
index c186f0041..b30dbcc62 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/SessionOutputBufferImpl.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/SessionOutputBufferImpl.java
@@ -54,7 +54,7 @@ import org.apache.hc.core5.util.CharArrayBuffer;
  */
 public class SessionOutputBufferImpl implements SessionOutputBuffer {
 
-    private static final byte[] CRLF = new byte[] {Chars.CR, Chars.LF};
+    private static final byte[] CRLF = {Chars.CR, Chars.LF};
 
     private final BasicHttpTransportMetrics metrics;
     private final ByteArrayBuffer buffer;
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ChunkEncoder.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ChunkEncoder.java
index 223f6fbc7..94456b0e7 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ChunkEncoder.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ChunkEncoder.java
@@ -137,8 +137,7 @@ public class ChunkEncoder extends AbstractContentEncoder {
 
     private void writeTrailers(final List<? extends Header> trailers) throws IOException {
         if (trailers != null) {
-            for (int i = 0; i < trailers.size(); i++) {
-                final Header header = trailers.get(i);
+            for (final Header header : trailers) {
                 if (header instanceof FormattedHeader) {
                     final CharArrayBuffer chbuffer = ((FormattedHeader) header).getBuffer();
                     buffer.writeLine(chbuffer);
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/SessionOutputBufferImpl.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/SessionOutputBufferImpl.java
index 77cd9951f..e434cd4d9 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/SessionOutputBufferImpl.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/SessionOutputBufferImpl.java
@@ -44,7 +44,7 @@ import org.apache.hc.core5.util.CharArrayBuffer;
 
 class SessionOutputBufferImpl extends ExpandableBuffer implements SessionOutputBuffer {
 
-    private static final byte[] CRLF = new byte[] {Chars.CR, Chars.LF};
+    private static final byte[] CRLF = {Chars.CR, Chars.LF};
 
     private final CharsetEncoder charEncoder;
     private final int lineBufferSize;
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/EntityUtils.java b/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/EntityUtils.java
index 37c6f0d3f..cd3828418 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/EntityUtils.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/EntityUtils.java
@@ -36,9 +36,11 @@ import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.UnsupportedCharsetException;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.HttpEntity;
@@ -183,7 +185,9 @@ public final class EntityUtils {
     }
 
     private static final Map<String, ContentType> CONTENT_TYPE_MAP;
+
     static {
+        // @formatter:off
         final ContentType[] contentTypes = {
                 ContentType.APPLICATION_ATOM_XML,
                 ContentType.APPLICATION_FORM_URLENCODED,
@@ -195,11 +199,9 @@ public final class EntityUtils {
                 ContentType.TEXT_HTML,
                 ContentType.TEXT_PLAIN,
                 ContentType.TEXT_XML };
-        final HashMap<String, ContentType> map = new HashMap<>();
-        for (final ContentType contentType: contentTypes) {
-            map.put(contentType.getMimeType(), contentType);
-        }
-        CONTENT_TYPE_MAP = Collections.unmodifiableMap(map);
+        // @formatter:on
+        CONTENT_TYPE_MAP = Collections.unmodifiableMap(
+                Stream.of(contentTypes).collect(Collectors.toMap(ContentType::getMimeType, Function.identity())));
     }
 
     private static String toString(final HttpEntity entity, final ContentType contentType, final int maxResultLength)
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/HttpEntities.java b/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/HttpEntities.java
index bcdbb982e..1852dd696 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/HttpEntities.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/io/entity/HttpEntities.java
@@ -38,6 +38,8 @@ import java.util.Arrays;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import java.util.zip.GZIPOutputStream;
 
 import org.apache.hc.core5.function.Supplier;
@@ -179,11 +181,8 @@ public final class HttpEntities {
 
             @Override
             public Set<String> getTrailerNames() {
-                final Set<String> names = new LinkedHashSet<>();
-                for (final Header trailer: trailers) {
-                    names.add(trailer.getName());
-                }
-                return names;
+                return Stream.of(trailers)
+                        .collect(Collectors.mapping(Header::getName, Collectors.toCollection(LinkedHashSet::new)));
             }
 
         };
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHeaderElement.java b/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHeaderElement.java
index d35324712..8c59f67a3 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHeaderElement.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHeaderElement.java
@@ -27,6 +27,8 @@
 
 package org.apache.hc.core5.http.message;
 
+import java.util.stream.Stream;
+
 import org.apache.hc.core5.http.HeaderElement;
 import org.apache.hc.core5.http.NameValuePair;
 import org.apache.hc.core5.util.Args;
@@ -105,14 +107,7 @@ public class BasicHeaderElement implements HeaderElement {
     @Override
     public NameValuePair getParameterByName(final String name) {
         Args.notNull(name, "Name");
-        NameValuePair found = null;
-        for (final NameValuePair current : this.parameters) {
-            if (current.getName().equalsIgnoreCase(name)) {
-                found = current;
-                break;
-            }
-        }
-        return found;
+        return Stream.of(this.parameters).filter(p -> p.getName().equalsIgnoreCase(name)).findFirst().orElse(null);
     }
 
     @Override
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java b/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java
index 072ea7ca5..eec21eddb 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java
@@ -33,6 +33,8 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.MessageHeaders;
@@ -50,7 +52,7 @@ public class HeaderGroup implements MessageHeaders, Serializable {
 
     private static final long serialVersionUID = 2608834160639271617L;
 
-    private static final Header[] EMPTY = new Header[] {};
+    private static final Header[] EMPTY = {};
 
     /** The list of headers for this group, in the order in which they were added */
     private final List<Header> headers;
@@ -63,13 +65,6 @@ public class HeaderGroup implements MessageHeaders, Serializable {
         this.headers = new ArrayList<>(16);
     }
 
-    /**
-     * Removes all headers.
-     */
-    public void clear() {
-        headers.clear();
-    }
-
     /**
      * Adds the given header to the group.  The order in which this header was
      * added is preserved.
@@ -84,89 +79,36 @@ public class HeaderGroup implements MessageHeaders, Serializable {
     }
 
     /**
-     * Removes the first given header.
-     *
-     * @param header the header to remove
-     * @return {@code true} if a header was removed as a result of this call.
-     */
-    public boolean removeHeader(final Header header) {
-        if (header == null) {
-            return false;
-        }
-        for (int i = 0; i < this.headers.size(); i++) {
-            final Header current = this.headers.get(i);
-            if (headerEquals(header, current)) {
-                this.headers.remove(current);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean headerEquals(final Header header1, final Header header2) {
-        return header2 == header1 || header2.getName().equalsIgnoreCase(header1.getName())
-                && Objects.equals(header1.getValue(), header2.getValue());
-    }
-
-    /**
-     * Removes all headers that match the given header.
-     *
-     * @param header the header to remove
-     * @return {@code true} if any header was removed as a result of this call.
-     *
-     * @since 5.0
+     * Removes all headers.
      */
-    public boolean removeHeaders(final Header header) {
-        if (header == null) {
-            return false;
-        }
-        boolean removed = false;
-        for (final Iterator<Header> iterator = headerIterator(); iterator.hasNext();) {
-            final Header current = iterator.next();
-            if (headerEquals(header, current)) {
-                iterator.remove();
-                removed = true;
-            }
-        }
-        return removed;
+    public void clear() {
+        headers.clear();
     }
 
     /**
-     * Replaces the first occurrence of the header with the same name. If no header with
-     * the same name is found the given header is added to the end of the list.
+     * Tests if headers with the given name are contained within this group.
      *
-     * @param header the new header that should replace the first header with the same
-     * name if present in the list.
+     * <p>Header name comparison is case insensitive.
      *
-     * @since 5.0
+     * @param name the header name to test for
+     * @return {@code true} if at least one header with the name is
+     * contained, {@code false} otherwise
      */
-    public void setHeader(final Header header) {
-        if (header == null) {
-            return;
-        }
-        for (int i = 0; i < this.headers.size(); i++) {
-            final Header current = this.headers.get(i);
-            if (current.getName().equalsIgnoreCase(header.getName())) {
-                this.headers.set(i, header);
-                return;
-            }
-        }
-        this.headers.add(header);
+    @Override
+    public boolean containsHeader(final String name) {
+        return stream().anyMatch(ignoreCasePredicate(name));
     }
 
     /**
-     * Sets all of the headers contained within this group overriding any
-     * existing headers. The headers are added in the order in which they appear
-     * in the array.
+     * Checks if a certain header is present in this message and how many times.
+     * <p>Header name comparison is case insensitive.
      *
-     * @param headers the headers to set
+     * @param name the header name to check for.
+     * @return number of occurrences of the header in the message.
      */
-    public void setHeaders(final Header... headers) {
-        clear();
-        if (headers == null) {
-            return;
-        }
-        Collections.addAll(this.headers, headers);
+    @Override
+    public int countHeaders(final String name) {
+        return (int) stream().filter(ignoreCasePredicate(name)).count();
     }
 
     /**
@@ -199,31 +141,6 @@ public class HeaderGroup implements MessageHeaders, Serializable {
         }
     }
 
-    /**
-     * Gets all of the headers with the given name.  The returned array
-     * maintains the relative order in which the headers were added.
-     *
-     * <p>Header name comparison is case insensitive.
-     *
-     * @param name the name of the header(s) to get
-     *
-     * @return an array of length &ge; 0
-     */
-    @Override
-    public Header[] getHeaders(final String name) {
-        List<Header> headersFound = null;
-        for (int i = 0; i < this.headers.size(); i++) {
-            final Header header = this.headers.get(i);
-            if (header.getName().equalsIgnoreCase(name)) {
-                if (headersFound == null) {
-                    headersFound = new ArrayList<>();
-                }
-                headersFound.add(header);
-            }
-        }
-        return headersFound != null ? headersFound.toArray(EMPTY) : EMPTY;
-    }
-
     /**
      * Gets the first header with the given name.
      *
@@ -234,13 +151,7 @@ public class HeaderGroup implements MessageHeaders, Serializable {
      */
     @Override
     public Header getFirstHeader(final String name) {
-        for (int i = 0; i < this.headers.size(); i++) {
-            final Header header = this.headers.get(i);
-            if (header.getName().equalsIgnoreCase(name)) {
-                return header;
-            }
-        }
-        return null;
+        return stream().filter(ignoreCasePredicate(name)).findFirst().orElse(null);
     }
 
     /**
@@ -256,8 +167,7 @@ public class HeaderGroup implements MessageHeaders, Serializable {
     public Header getHeader(final String name) throws ProtocolException {
         int count = 0;
         Header singleHeader = null;
-        for (int i = 0; i < this.headers.size(); i++) {
-            final Header header = this.headers.get(i);
+        for (final Header header : this.headers) {
             if (header.getName().equalsIgnoreCase(name)) {
                 singleHeader = header;
                 count++;
@@ -269,27 +179,6 @@ public class HeaderGroup implements MessageHeaders, Serializable {
         return singleHeader;
     }
 
-    /**
-     * Gets the last header with the given name.
-     *
-     * <p>Header name comparison is case insensitive.
-     *
-     * @param name the name of the header to get
-     * @return the last header or {@code null}
-     */
-    @Override
-    public Header getLastHeader(final String name) {
-        // start at the end of the list and work backwards
-        for (int i = headers.size() - 1; i >= 0; i--) {
-            final Header header = headers.get(i);
-            if (header.getName().equalsIgnoreCase(name)) {
-                return header;
-            }
-        }
-
-        return null;
-    }
-
     /**
      * Gets all of the headers contained within this group.
      *
@@ -301,43 +190,44 @@ public class HeaderGroup implements MessageHeaders, Serializable {
     }
 
     /**
-     * Tests if headers with the given name are contained within this group.
+     * Gets all of the headers with the given name.  The returned array
+     * maintains the relative order in which the headers were added.
      *
      * <p>Header name comparison is case insensitive.
      *
-     * @param name the header name to test for
-     * @return {@code true} if at least one header with the name is
-     * contained, {@code false} otherwise
+     * @param name the name of the header(s) to get
+     *
+     * @return an array of length &ge; 0
      */
     @Override
-    public boolean containsHeader(final String name) {
-        for (int i = 0; i < this.headers.size(); i++) {
-            final Header header = this.headers.get(i);
-            if (header.getName().equalsIgnoreCase(name)) {
-                return true;
-            }
-        }
-
-        return false;
+    public Header[] getHeaders(final String name) {
+        return stream().filter(ignoreCasePredicate(name)).toArray(Header[]::new);
     }
 
     /**
-     * Checks if a certain header is present in this message and how many times.
+     * Gets the last header with the given name.
+     *
      * <p>Header name comparison is case insensitive.
      *
-     * @param name the header name to check for.
-     * @return number of occurrences of the header in the message.
+     * @param name the name of the header to get
+     * @return the last header or {@code null}
      */
     @Override
-    public int countHeaders(final String name) {
-        int count = 0;
-        for (int i = 0; i < this.headers.size(); i++) {
-            final Header header = this.headers.get(i);
+    public Header getLastHeader(final String name) {
+        // start at the end of the list and work backwards
+        for (int i = headers.size() - 1; i >= 0; i--) {
+            final Header header = headers.get(i);
             if (header.getName().equalsIgnoreCase(name)) {
-                count++;
+                return header;
             }
         }
-        return count;
+
+        return null;
+    }
+
+    private boolean headerEquals(final Header header1, final Header header2) {
+        return header2 == header1 || header2.getName().equalsIgnoreCase(header1.getName())
+                && Objects.equals(header1.getValue(), header2.getValue());
     }
 
     /**
@@ -367,6 +257,42 @@ public class HeaderGroup implements MessageHeaders, Serializable {
         return new BasicListHeaderIterator(this.headers, name);
     }
 
+    private Predicate<? super Header> ignoreCasePredicate(final String name) {
+        return h -> h.getName().equalsIgnoreCase(name);
+    }
+
+    /**
+     * Removes the first given header.
+     *
+     * @param header the header to remove
+     * @return {@code true} if a header was removed as a result of this call.
+     */
+    public boolean removeHeader(final Header header) {
+        if (header == null) {
+            return false;
+        }
+        for (int i = 0; i < this.headers.size(); i++) {
+            final Header current = this.headers.get(i);
+            if (headerEquals(header, current)) {
+                this.headers.remove(current);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Removes all headers that match the given header.
+     *
+     * @param header the header to remove
+     * @return {@code true} if any header was removed as a result of this call.
+     *
+     * @since 5.0
+     */
+    public boolean removeHeaders(final Header header) {
+        return header != null ? headers.removeIf(h -> headerEquals(header, h)) : false;
+    }
+
     /**
      * Removes all headers with a given name in this group.
      *
@@ -376,23 +302,53 @@ public class HeaderGroup implements MessageHeaders, Serializable {
      * @since 5.0
      */
     public boolean removeHeaders(final String name) {
-        if (name == null) {
-            return false;
+        return name != null ? headers.removeIf(ignoreCasePredicate(name)) : false;
+    }
+
+    /**
+     * Replaces the first occurrence of the header with the same name. If no header with
+     * the same name is found the given header is added to the end of the list.
+     *
+     * @param header the new header that should replace the first header with the same
+     * name if present in the list.
+     *
+     * @since 5.0
+     */
+    public void setHeader(final Header header) {
+        if (header == null) {
+            return;
         }
-        boolean removed = false;
-        for (final Iterator<Header> iterator = headerIterator(); iterator.hasNext(); ) {
-            final Header header = iterator.next();
-            if (header.getName().equalsIgnoreCase(name)) {
-                iterator.remove();
-                removed = true;
+        for (int i = 0; i < headers.size(); i++) {
+            if (ignoreCasePredicate(header.getName()).test(headers.get(i))) {
+                headers.set(i, header);
+                return;
             }
         }
-        return removed;
+        headers.add(header);
+    }
+
+    /**
+     * Sets all of the headers contained within this group overriding any
+     * existing headers. The headers are added in the order in which they appear
+     * in the array.
+     *
+     * @param headers the headers to set
+     */
+    public void setHeaders(final Header... headers) {
+        clear();
+        if (headers == null) {
+            return;
+        }
+        Collections.addAll(this.headers, headers);
+    }
+
+    private Stream<Header> stream() {
+        return headers.stream();
     }
 
     @Override
     public String toString() {
-        return this.headers.toString();
+        return headers.toString();
     }
 
 }
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/nio/entity/AsyncEntityProducers.java b/httpcore5/src/main/java/org/apache/hc/core5/http/nio/entity/AsyncEntityProducers.java
index 44a7246f3..b4fb54348 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/nio/entity/AsyncEntityProducers.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/nio/entity/AsyncEntityProducers.java
@@ -40,6 +40,8 @@ import java.util.Arrays;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.function.Callback;
 import org.apache.hc.core5.http.ContentType;
@@ -158,11 +160,7 @@ public final class AsyncEntityProducers {
 
             @Override
             public Set<String> getTrailerNames() {
-                final Set<String> names = new LinkedHashSet<>();
-                for (final Header trailer: trailers) {
-                    names.add(trailer.getName());
-                }
-                return names;
+                return Stream.of(trailers).map(Header::getName).collect(Collectors.toCollection(LinkedHashSet::new));
             }
 
             @Override
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/nio/ssl/FixedPortStrategy.java b/httpcore5/src/main/java/org/apache/hc/core5/http/nio/ssl/FixedPortStrategy.java
index 7d45df2bd..cb2548e3c 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/nio/ssl/FixedPortStrategy.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/nio/ssl/FixedPortStrategy.java
@@ -29,6 +29,7 @@ package org.apache.hc.core5.http.nio.ssl;
 
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.util.stream.IntStream;
 
 import org.apache.hc.core5.util.Args;
 
@@ -51,12 +52,7 @@ public final class FixedPortStrategy implements SecurePortStrategy {
     @Override
     public boolean isSecure(final SocketAddress localAddress) {
         final int port = ((InetSocketAddress) localAddress).getPort();
-        for (final int securePort: securePorts) {
-            if (port == securePort) {
-                return true;
-            }
-        }
-        return false;
+        return IntStream.of(securePorts).anyMatch(securePort -> port == securePort);
     }
 
 }
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/ChainBuilder.java b/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/ChainBuilder.java
index d9d0e8109..a49dadb26 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/ChainBuilder.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/ChainBuilder.java
@@ -31,6 +31,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
+import java.util.stream.Stream;
 
 /**
  * Builder class to build a linked list (chain) of unique class instances. Each class can have
@@ -80,9 +81,7 @@ final class ChainBuilder<E> {
         if (c == null) {
             return this;
         }
-        for (final E e: c) {
-            addFirst(e);
-        }
+        c.forEach(this::addFirst);
         return this;
     }
 
@@ -91,9 +90,7 @@ final class ChainBuilder<E> {
         if (c == null) {
             return this;
         }
-        for (final E e: c) {
-            addFirst(e);
-        }
+        Stream.of(c).forEach(this::addFirst);
         return this;
     }
 
@@ -101,9 +98,7 @@ final class ChainBuilder<E> {
         if (c == null) {
             return this;
         }
-        for (final E e: c) {
-            addLast(e);
-        }
+        c.forEach(this::addLast);
         return this;
     }
 
@@ -112,9 +107,7 @@ final class ChainBuilder<E> {
         if (c == null) {
             return this;
         }
-        for (final E e: c) {
-            addLast(e);
-        }
+        Stream.of(c).forEach(this::addLast);
         return this;
     }
 
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/HttpDateGenerator.java b/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/HttpDateGenerator.java
index 8bfd09046..e82ea8db1 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/HttpDateGenerator.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/HttpDateGenerator.java
@@ -64,7 +64,7 @@ public class HttpDateGenerator {
     private final DateTimeFormatter dateTimeFormatter;
     private long dateAsMillis;
     private String dateAsText;
-    private ZoneId zoneId;
+    private final ZoneId zoneId;
 
     HttpDateGenerator() {
         dateTimeFormatter =new DateTimeFormatterBuilder()
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java b/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java
index d1884f146..578ddea09 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TLS.java
@@ -27,8 +27,9 @@
 
 package org.apache.hc.core5.http.ssl;
 
-import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.ParseException;
 import org.apache.hc.core5.http.ProtocolVersion;
@@ -102,12 +103,7 @@ public enum TLS {
         if (protocols == null) {
             return null;
         }
-        final List<String> enabledProtocols = new ArrayList<>();
-        for (final String protocol : protocols) {
-            if (isSecure(protocol)) {
-                enabledProtocols.add(protocol);
-            }
-        }
+        final List<String> enabledProtocols = Stream.of(protocols).filter(TLS::isSecure).collect(Collectors.toList());
         if (enabledProtocols.isEmpty()) {
             enabledProtocols.add(V_1_2.id);
         }
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TlsCiphers.java b/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TlsCiphers.java
index 140f92563..245a870bd 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TlsCiphers.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/ssl/TlsCiphers.java
@@ -27,13 +27,14 @@
 
 package org.apache.hc.core5.http.ssl;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * TLS cipher suite support methods
@@ -337,24 +338,15 @@ public final class TlsCiphers {
             Pattern.compile(WEAK_CIPHERS, Pattern.CASE_INSENSITIVE)));
 
     public static boolean isWeak(final String cipherSuite) {
-        for (final Pattern pattern : WEAK_CIPHER_SUITE_PATTERNS) {
-            if (pattern.matcher(cipherSuite).matches()) {
-                return true;
-            }
-        }
-        return false;
+        return WEAK_CIPHER_SUITE_PATTERNS.stream().anyMatch(pattern -> pattern.matcher(cipherSuite).matches());
     }
 
     public static String[] excludeH2Blacklisted(final String... ciphers) {
         if (ciphers == null) {
             return null;
         }
-        final List<String> enabledCiphers = new ArrayList<>();
-        for (final String cipher: ciphers) {
-            if (!TlsCiphers.isH2Blacklisted(cipher)) {
-                enabledCiphers.add(cipher);
-            }
-        }
+        final List<String> enabledCiphers = Stream.of(ciphers).filter(cipher -> !TlsCiphers.isH2Blacklisted(cipher))
+                .collect(Collectors.toList());
         return !enabledCiphers.isEmpty() ? enabledCiphers.toArray(new String[0]) : ciphers;
     }
 
@@ -362,12 +354,8 @@ public final class TlsCiphers {
         if (ciphers == null) {
             return null;
         }
-        final List<String> enabledCiphers = new ArrayList<>();
-        for (final String cipher: ciphers) {
-            if (!TlsCiphers.isWeak(cipher)) {
-                enabledCiphers.add(cipher);
-            }
-        }
+        final List<String> enabledCiphers = Stream.of(ciphers).filter(cipher -> !TlsCiphers.isWeak(cipher))
+                .collect(Collectors.toList());
         return !enabledCiphers.isEmpty() ? enabledCiphers.toArray(new String[0]) : ciphers;
     }
 
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/support/AbstractRequestBuilder.java b/httpcore5/src/main/java/org/apache/hc/core5/http/support/AbstractRequestBuilder.java
index be0b9ab7d..aff585c28 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/support/AbstractRequestBuilder.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/support/AbstractRequestBuilder.java
@@ -33,6 +33,7 @@ import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.HttpHost;
@@ -275,9 +276,7 @@ public abstract class AbstractRequestBuilder<T> extends AbstractMessageBuilder<T
     }
 
     public AbstractRequestBuilder<T> addParameters(final NameValuePair... nvps) {
-        for (final NameValuePair nvp : nvps) {
-            addParameter(nvp);
-        }
+        Stream.of(nvps).forEach(this::addParameter);
         return this;
     }
 
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java b/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java
index 8212db616..861bd4bfe 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/net/URIBuilder.java
@@ -38,6 +38,7 @@ import java.util.BitSet;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.hc.core5.http.HttpHost;
 import org.apache.hc.core5.http.NameValuePair;
@@ -271,12 +272,7 @@ public class URIBuilder {
         if (s == null) {
             return null;
         }
-        final List<String> segments = splitPath(s);
-        final List<String> list = new ArrayList<>(segments.size());
-        for (final String segment: segments) {
-            list.add(PercentCodec.decode(segment, charset));
-        }
-        return list;
+        return splitPath(s).stream().map(segment -> PercentCodec.decode(segment, charset)).collect(Collectors.toList());
     }
 
     static void formatPath(final StringBuilder buf, final Iterable<String> segments, final boolean rootless, final Charset charset) {
@@ -952,9 +948,7 @@ public class URIBuilder {
             return null;
         }
         final StringBuilder result = new StringBuilder();
-        for (final String segment : this.pathSegments) {
-            result.append('/').append(segment);
-        }
+        this.pathSegments.forEach(segment -> result.append('/').append(segment));
         return result.toString();
     }
 
@@ -1034,7 +1028,7 @@ public class URIBuilder {
             final List<String> inputSegments = this.pathSegments;
             if (!inputSegments.isEmpty()) {
                 final LinkedList<String> outputSegments = new LinkedList<>();
-                for (final String inputSegment : inputSegments) {
+                inputSegments.forEach(inputSegment -> {
                     if (!inputSegment.isEmpty() && !".".equals(inputSegment)) {
                         if ("..".equals(inputSegment)) {
                             if (!outputSegments.isEmpty()) {
@@ -1044,7 +1038,7 @@ public class URIBuilder {
                             outputSegments.addLast(inputSegment);
                         }
                     }
-                }
+                });
                 if (!inputSegments.isEmpty()) {
                     final String lastSegment = inputSegments.get(inputSegments.size() - 1);
                     if (lastSegment.isEmpty()) {
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/pool/LaxConnPool.java b/httpcore5/src/main/java/org/apache/hc/core5/pool/LaxConnPool.java
index 4a40470ee..e0b0957eb 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/pool/LaxConnPool.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/pool/LaxConnPool.java
@@ -122,10 +122,7 @@ public class LaxConnPool<T, C extends ModalCloseable> implements ManagedConnPool
     @Override
     public void close(final CloseMode closeMode) {
         if (isShutDown.compareAndSet(false, true)) {
-            for (final Iterator<PerRoutePool<T, C>> it = routeToPool.values().iterator(); it.hasNext(); ) {
-                final PerRoutePool<T, C> routePool = it.next();
-                routePool.shutdown(closeMode);
-            }
+            routeToPool.values().forEach(routePool -> routePool.shutdown(closeMode));
             routeToPool.clear();
         }
     }
@@ -182,9 +179,7 @@ public class LaxConnPool<T, C extends ModalCloseable> implements ManagedConnPool
     }
 
     public void validatePendingRequests() {
-        for (final PerRoutePool<T, C> routePool : routeToPool.values()) {
-            routePool.validatePendingRequests();
-        }
+        routeToPool.values().forEach(PerRoutePool::validatePendingRequests);
     }
 
     @Override
@@ -253,15 +248,11 @@ public class LaxConnPool<T, C extends ModalCloseable> implements ManagedConnPool
     }
 
     public void enumAvailable(final Callback<PoolEntry<T, C>> callback) {
-        for (final PerRoutePool<T, C> routePool : routeToPool.values()) {
-            routePool.enumAvailable(callback);
-        }
+        routeToPool.values().forEach(routePool -> routePool.enumAvailable(callback));
     }
 
     public void enumLeased(final Callback<PoolEntry<T, C>> callback) {
-        for (final PerRoutePool<T, C> routePool : routeToPool.values()) {
-            routePool.enumLeased(callback);
-        }
+        routeToPool.values().forEach(routePool -> routePool.enumLeased(callback));
     }
 
     @Override
@@ -394,9 +385,7 @@ public class LaxConnPool<T, C extends ModalCloseable> implements ManagedConnPool
                 while ((entryRef = available.poll()) != null) {
                     entryRef.getReference().discardConnection(closeMode);
                 }
-                for (final PoolEntry<T, C> entry : leased.keySet()) {
-                    entry.discardConnection(closeMode);
-                }
+                leased.keySet().forEach(entry -> entry.discardConnection(closeMode));
                 leased.clear();
                 LeaseRequest<T, C> leaseRequest;
                 while ((leaseRequest = pending.poll()) != null) {
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java b/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java
index 9801cf82e..c676b9dd8 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java
@@ -139,9 +139,7 @@ public class StrictConnPool<T, C extends ModalCloseable> implements ManagedConnP
             fireCallbacks();
             this.lock.lock();
             try {
-                for (final PerRoutePool<T, C> pool: this.routeToPool.values()) {
-                    pool.shutdown(closeMode);
-                }
+                this.routeToPool.values().forEach(pool -> pool.shutdown(closeMode));
                 this.routeToPool.clear();
                 this.leased.clear();
                 this.available.clear();
@@ -529,12 +527,8 @@ public class StrictConnPool<T, C extends ModalCloseable> implements ManagedConnP
         this.lock.lock();
         try {
             final PerRoutePool<T, C> pool = getPool(route);
-            int pendingCount = 0;
-            for (final LeaseRequest<T, C> request: pendingRequests) {
-                if (Objects.equals(route, request.getRoute())) {
-                    pendingCount++;
-                }
-            }
+            final int pendingCount = (int) pendingRequests.stream()
+                    .filter(request -> Objects.equals(route, request.getRoute())).count();
             return new PoolStats(
                     pool.getLeasedCount(),
                     pendingCount,
@@ -593,11 +587,7 @@ public class StrictConnPool<T, C extends ModalCloseable> implements ManagedConnP
     public void enumLeased(final Callback<PoolEntry<T, C>> callback) {
         this.lock.lock();
         try {
-            final Iterator<PoolEntry<T, C>> it = this.leased.iterator();
-            while (it.hasNext()) {
-                final PoolEntry<T, C> entry = it.next();
-                callback.execute(entry);
-            }
+            this.leased.forEach(callback::execute);
             processPendingRequests();
         } finally {
             this.lock.unlock();
@@ -822,9 +812,7 @@ public class StrictConnPool<T, C extends ModalCloseable> implements ManagedConnP
             while ((availableEntry = available.poll()) != null) {
                 availableEntry.discardConnection(closeMode);
             }
-            for (final PoolEntry<T, C> entry: this.leased) {
-                entry.discardConnection(closeMode);
-            }
+            this.leased.forEach(entry -> entry.discardConnection(closeMode));
             this.leased.clear();
         }
 
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractIOSessionPool.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractIOSessionPool.java
index efe855d95..0fadfe1e5 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractIOSessionPool.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractIOSessionPool.java
@@ -233,7 +233,7 @@ public abstract class AbstractIOSessionPool<T> implements ModalCloseable {
     }
 
     public final void enumAvailable(final Callback<IOSession> callback) {
-        for (final PoolEntry poolEntry: sessionPool.values()) {
+        sessionPool.values().forEach(poolEntry -> {
             if (poolEntry.session != null) {
                 synchronized (poolEntry) {
                     if (poolEntry.session != null) {
@@ -244,12 +244,12 @@ public abstract class AbstractIOSessionPool<T> implements ModalCloseable {
                     }
                 }
             }
-        }
+        });
     }
 
     public final void closeIdle(final TimeValue idleTime) {
         final long deadline = System.currentTimeMillis() - (TimeValue.isPositive(idleTime) ? idleTime.toMilliseconds() : 0);
-        for (final PoolEntry poolEntry: sessionPool.values()) {
+        sessionPool.values().forEach(poolEntry -> {
             if (poolEntry.session != null) {
                 synchronized (poolEntry) {
                     if (poolEntry.session != null && poolEntry.session.getLastReadTime() <= deadline) {
@@ -258,7 +258,7 @@ public abstract class AbstractIOSessionPool<T> implements ModalCloseable {
                     }
                 }
             }
-        }
+        });
     }
 
     public final Set<T> getRoutes() {
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java
index 7be876463..8d61b433d 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java
@@ -30,6 +30,7 @@ package org.apache.hc.core5.reactor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Stream;
 
 import org.apache.hc.core5.io.CloseMode;
 import org.apache.hc.core5.io.Closer;
@@ -66,9 +67,7 @@ class MultiCoreIOReactor implements IOReactor {
      */
     public final void start() {
         if (this.status.compareAndSet(IOReactorStatus.INACTIVE, IOReactorStatus.ACTIVE)) {
-            for (int i = 0; i < this.threads.length; i++) {
-                this.threads[i].start();
-            }
+            Stream.of(this.threads).forEach(Thread::start);
         }
     }
 
@@ -76,10 +75,7 @@ class MultiCoreIOReactor implements IOReactor {
     public final void initiateShutdown() {
         if (this.status.compareAndSet(IOReactorStatus.INACTIVE, IOReactorStatus.SHUT_DOWN) ||
                 this.status.compareAndSet(IOReactorStatus.ACTIVE, IOReactorStatus.SHUTTING_DOWN)) {
-            for (int i = 0; i < this.ioReactors.length; i++) {
-                final IOReactor ioReactor = this.ioReactors[i];
-                ioReactor.initiateShutdown();
-            }
+            Stream.of(this.ioReactors).forEach(IOReactor::initiateShutdown);
         }
     }
 
@@ -88,8 +84,7 @@ class MultiCoreIOReactor implements IOReactor {
         Args.notNull(waitTime, "Wait time");
         final long deadline = System.currentTimeMillis() + waitTime.toMilliseconds();
         long remaining = waitTime.toMilliseconds();
-        for (int i = 0; i < this.ioReactors.length; i++) {
-            final IOReactor ioReactor = this.ioReactors[i];
+        for (final IOReactor ioReactor : this.ioReactors) {
             if (ioReactor.getStatus().compareTo(IOReactorStatus.SHUT_DOWN) < 0) {
                 ioReactor.awaitShutdown(TimeValue.of(remaining, TimeUnit.MILLISECONDS));
                 remaining = deadline - System.currentTimeMillis();
@@ -98,8 +93,7 @@ class MultiCoreIOReactor implements IOReactor {
                 }
             }
         }
-        for (int i = 0; i < this.threads.length; i++) {
-            final Thread thread = this.threads[i];
+        for (final Thread thread : this.threads) {
             thread.join(remaining);
             remaining = deadline - System.currentTimeMillis();
             if (remaining <= 0) {
@@ -135,12 +129,8 @@ class MultiCoreIOReactor implements IOReactor {
         }
         this.status.set(IOReactorStatus.SHUT_DOWN);
         if (this.terminated.compareAndSet(false, true)) {
-            for (int i = 0; i < this.ioReactors.length; i++) {
-                Closer.close(this.ioReactors[i], CloseMode.IMMEDIATE);
-            }
-            for (int i = 0; i < this.threads.length; i++) {
-                this.threads[i].interrupt();
-            }
+            Stream.of(this.ioReactors).forEach(ioReactor -> Closer.close(ioReactor, CloseMode.IMMEDIATE));
+            Stream.of(this.threads).forEach(Thread::interrupt);
         }
     }
 
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
index d494c3ad4..1aacdf0a7 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
@@ -151,12 +151,12 @@ class SingleCoreIOReactor extends AbstractSingleCoreIOReactor implements Connect
     private void initiateSessionShutdown() {
         if (this.sessionShutdownCallback != null) {
             final Set<SelectionKey> keys = this.selector.keys();
-            for (final SelectionKey key : keys) {
+            keys.forEach(key -> {
                 final InternalChannel channel = (InternalChannel) key.attachment();
                 if (channel instanceof InternalDataChannel) {
                     this.sessionShutdownCallback.execute((InternalDataChannel) channel);
                 }
-            }
+            });
         }
     }
 
@@ -164,14 +164,12 @@ class SingleCoreIOReactor extends AbstractSingleCoreIOReactor implements Connect
         final long currentTimeMillis = System.currentTimeMillis();
         if ((currentTimeMillis - this.lastTimeoutCheckMillis) >= this.selectTimeoutMillis) {
             this.lastTimeoutCheckMillis = currentTimeMillis;
-            for (final SelectionKey key : this.selector.keys()) {
-                checkTimeout(key, currentTimeMillis);
-            }
+            this.selector.keys().forEach(key -> checkTimeout(key, currentTimeMillis));
         }
     }
 
     private void processEvents(final Set<SelectionKey> selectedKeys) {
-        for (final SelectionKey key : selectedKeys) {
+        selectedKeys.forEach(key -> {
             final InternalChannel channel = (InternalChannel) key.attachment();
             if (channel != null) {
                 try {
@@ -180,7 +178,7 @@ class SingleCoreIOReactor extends AbstractSingleCoreIOReactor implements Connect
                     channel.close(CloseMode.GRACEFUL);
                 }
             }
-        }
+        });
         selectedKeys.clear();
     }
 
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/ssl/SSLContextBuilder.java b/httpcore5/src/main/java/org/apache/hc/core5/ssl/SSLContextBuilder.java
index 97f2b4b1f..b89e420c4 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/ssl/SSLContextBuilder.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/ssl/SSLContextBuilder.java
@@ -54,6 +54,7 @@ import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Stream;
 
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
@@ -527,9 +528,8 @@ public class SSLContextBuilder {
         public Map<String, PrivateKeyDetails> getClientAliasMap(
                 final String[] keyTypes, final Principal[] issuers) {
             final Map<String, PrivateKeyDetails> validAliases = new HashMap<>();
-            for (final String keyType: keyTypes) {
-                putPrivateKeyDetails(validAliases, keyType, this.keyManager.getClientAliases(keyType, issuers));
-            }
+            Stream.of(keyTypes).forEach(keyType -> putPrivateKeyDetails(validAliases, keyType,
+                    this.keyManager.getClientAliases(keyType, issuers)));
             return validAliases;
         }
 
@@ -540,13 +540,14 @@ public class SSLContextBuilder {
             return validAliases;
         }
 
-        private void putPrivateKeyDetails(final Map<String, PrivateKeyDetails> validAliases, final String keyType,
+        private Map<String, PrivateKeyDetails> putPrivateKeyDetails(final Map<String, PrivateKeyDetails> validAliases, final String keyType,
                 final String[] aliases) {
             if (aliases != null) {
                 for (final String alias: aliases) {
                     validAliases.put(alias, new PrivateKeyDetails(keyType, this.keyManager.getCertificateChain(alias)));
                 }
             }
+            return validAliases;
         }
 
         @Override
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/util/TextUtils.java b/httpcore5/src/main/java/org/apache/hc/core5/util/TextUtils.java
index a8b6a6e28..1f2551d31 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/util/TextUtils.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/util/TextUtils.java
@@ -118,8 +118,8 @@ public final class TextUtils {
             return null;
         }
         final StringBuilder buffer = new StringBuilder();
-        for (int i = 0; i < bytes.length; i++) {
-            final int unsignedB = bytes[i] & 0xff;
+        for (final byte element : bytes) {
+            final int unsignedB = element & 0xff;
             if (unsignedB < 16) {
                 buffer.append('0');
             }
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/util/VersionInfo.java b/httpcore5/src/main/java/org/apache/hc/core5/util/VersionInfo.java
index 7801efba4..473b171c9 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/util/VersionInfo.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/util/VersionInfo.java
@@ -29,10 +29,10 @@ package org.apache.hc.core5.util;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
+import java.util.stream.Stream;
 
 /**
  * Provides access to version information for HTTP components.
@@ -80,12 +80,6 @@ public class VersionInfo {
     /** The classloader from which the version info was obtained. */
     private final String infoClassloader;
 
-    /**
-     * An empty immutable {@code VersionInfo} array.
-     */
-    private static final VersionInfo[] EMPTY_VERSION_INFO_ARRAY = {};
-
-
     /**
      * Instantiates version information.
      *
@@ -202,21 +196,12 @@ public class VersionInfo {
      * @return  the version information for all packages found,
      *          never {@code null}
      */
-    public static VersionInfo[] loadVersionInfo(final String[] pckgs,
-                                                      final ClassLoader clsldr) {
+    public static VersionInfo[] loadVersionInfo(final String[] pckgs, final ClassLoader clsldr) {
         Args.notNull(pckgs, "Package identifier array");
-        final List<VersionInfo> vil = new ArrayList<>(pckgs.length);
-        for (final String pckg : pckgs) {
-            final VersionInfo vi = loadVersionInfo(pckg, clsldr);
-            if (vi != null) {
-                vil.add(vi);
-            }
-        }
-
-        return vil.toArray(EMPTY_VERSION_INFO_ARRAY);
+        return Stream.of(pckgs).map(pckg -> loadVersionInfo(pckg, clsldr)).filter(Objects::nonNull)
+                .toArray(VersionInfo[]::new);
     }
 
-
     /**
      * Loads version information for a package.
      *
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/ReadableByteChannelMock.java b/httpcore5/src/test/java/org/apache/hc/core5/http/ReadableByteChannelMock.java
index dc9582f1e..48d9c0877 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/ReadableByteChannelMock.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/ReadableByteChannelMock.java
@@ -32,6 +32,7 @@ import java.nio.ByteBuffer;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.ReadableByteChannel;
 import java.nio.charset.Charset;
+import java.util.stream.Stream;
 
 public class ReadableByteChannelMock implements ReadableByteChannel {
 
@@ -45,10 +46,7 @@ public class ReadableByteChannelMock implements ReadableByteChannel {
 
     public ReadableByteChannelMock(final String[] strings, final Charset charset) {
         super();
-        this.chunks = new byte[strings.length][];
-        for (int i = 0; i < strings.length; i++) {
-            this.chunks[i] = strings[i].getBytes(charset);
-        }
+        this.chunks = Stream.of(strings).map(s -> s.getBytes(charset)).toArray(byte[][]::new);
     }
 
     public ReadableByteChannelMock(final byte[]... chunks) {
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncPipelinedRequestExecutionExample.java b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncPipelinedRequestExecutionExample.java
index 5989e75d2..4ef7d9a96 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncPipelinedRequestExecutionExample.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncPipelinedRequestExecutionExample.java
@@ -26,6 +26,8 @@
  */
 package org.apache.hc.core5.http.examples;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
@@ -95,13 +97,13 @@ public class AsyncPipelinedRequestExecutionExample {
         requester.start();
 
         final HttpHost target = new HttpHost("httpbin.org");
-        final String[] requestUris = new String[] {"/", "/ip", "/user-agent", "/headers"};
+        final List<String> requestUris = Arrays.asList("/", "/ip", "/user-agent", "/headers");
 
         final Future<AsyncClientEndpoint> future = requester.connect(target, Timeout.ofSeconds(5));
         final AsyncClientEndpoint clientEndpoint = future.get();
 
-        final CountDownLatch latch = new CountDownLatch(requestUris.length);
-        for (final String requestUri: requestUris) {
+        final CountDownLatch latch = new CountDownLatch(requestUris.size());
+        requestUris.forEach(requestUri ->
             clientEndpoint.execute(
                     AsyncRequestBuilder.get()
                             .setHttpHost(target)
@@ -131,8 +133,8 @@ public class AsyncPipelinedRequestExecutionExample {
                             System.out.println(requestUri + " cancelled");
                         }
 
-                    });
-        }
+                    })
+        );
 
         latch.await();
 
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java
index 30ff900ec..25d987cb4 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java
@@ -26,6 +26,8 @@
  */
 package org.apache.hc.core5.http.examples;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -92,10 +94,10 @@ public class AsyncRequestExecutionExample {
         requester.start();
 
         final HttpHost target = new HttpHost("httpbin.org");
-        final String[] requestUris = new String[] {"/", "/ip", "/user-agent", "/headers"};
+        final List<String> requestUris = Arrays.asList("/", "/ip", "/user-agent", "/headers");
 
-        final CountDownLatch latch = new CountDownLatch(requestUris.length);
-        for (final String requestUri: requestUris) {
+        final CountDownLatch latch = new CountDownLatch(requestUris.size());
+        requestUris.forEach(requestUri ->
             requester.execute(
                     AsyncRequestBuilder.get()
                             .setHttpHost(target)
@@ -126,8 +128,8 @@ public class AsyncRequestExecutionExample {
                             latch.countDown();
                         }
 
-                    });
-        }
+                    })
+        );
 
         latch.await();
         System.out.println("Shutting down I/O reactor");
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java
index 96726c70c..93db19009 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java
@@ -35,7 +35,6 @@ import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -482,12 +481,11 @@ public class AsyncReverseProxyExample {
                         incomingRequest.getMethod(),
                         targetHost,
                         incomingRequest.getPath());
-                for (final Iterator<Header> it = incomingRequest.headerIterator(); it.hasNext(); ) {
-                    final Header header = it.next();
+                incomingRequest.headerIterator().forEachRemaining(header -> {
                     if (!HOP_BY_HOP.contains(TextUtils.toLowerCase(header.getName()))) {
                         outgoingRequest.addHeader(header);
                     }
-                }
+                });
 
                 println("[proxy->origin] " + exchangeState.id + " " +
                         outgoingRequest.getMethod() + " " + outgoingRequest.getRequestUri());
@@ -549,12 +547,11 @@ public class AsyncReverseProxyExample {
                 }
 
                 final HttpResponse outgoingResponse = new BasicHttpResponse(incomingResponse.getCode());
-                for (final Iterator<Header> it = incomingResponse.headerIterator(); it.hasNext(); ) {
-                    final Header header = it.next();
+                incomingResponse.headerIterator().forEachRemaining(header -> {
                     if (!HOP_BY_HOP.contains(TextUtils.toLowerCase(header.getName()))) {
                         outgoingResponse.addHeader(header);
                     }
-                }
+                });
 
                 exchangeState.response = outgoingResponse;
                 exchangeState.responseEntityDetails = entityDetails;
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicGetExecutionExample.java b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicGetExecutionExample.java
index 1b12d9979..a7953d3ed 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicGetExecutionExample.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicGetExecutionExample.java
@@ -83,10 +83,9 @@ public class ClassicGetExecutionExample {
 
         final HttpCoreContext coreContext = HttpCoreContext.create();
         final HttpHost target = new HttpHost("httpbin.org");
-        final String[] requestUris = new String[] {"/", "/ip", "/user-agent", "/headers"};
+        final String[] requestUris = {"/", "/ip", "/user-agent", "/headers"};
 
-        for (int i = 0; i < requestUris.length; i++) {
-            final String requestUri = requestUris[i];
+        for (final String requestUri : requestUris) {
             final ClassicHttpRequest request = ClassicRequestBuilder.get()
                     .setHttpHost(target)
                     .setPath(requestUri)
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicPostExecutionExample.java b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicPostExecutionExample.java
index fa79ae635..428936fec 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicPostExecutionExample.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicPostExecutionExample.java
@@ -105,12 +105,12 @@ public class ClassicPostExecutionExample {
         };
 
         final String requestUri = "/post";
-        for (int i = 0; i < requestBodies.length; i++) {
+        for (final HttpEntity element : requestBodies) {
             final ClassicHttpRequest request = ClassicRequestBuilder.get()
                     .setHttpHost(target)
                     .setPath(requestUri)
                     .build();
-            request.setEntity(requestBodies[i]);
+            request.setEntity(element);
             try (ClassicHttpResponse response = httpRequester.execute(target, request, Timeout.ofSeconds(5), coreContext)) {
                 System.out.println(requestUri + "->" + response.getCode());
                 System.out.println(EntityUtils.toString(response.getEntity()));
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java
index b2fc53502..910082315 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java
@@ -33,14 +33,12 @@ import java.net.SocketTimeoutException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.ConnectionClosedException;
 import org.apache.hc.core5.http.ExceptionListener;
-import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.HttpConnection;
 import org.apache.hc.core5.http.HttpException;
 import org.apache.hc.core5.http.HttpHeaders;
@@ -222,22 +220,20 @@ public class ClassicReverseProxyExample {
                     incomingRequest.getMethod(),
                     targetHost,
                     incomingRequest.getPath());
-            for (final Iterator<Header> it = incomingRequest.headerIterator(); it.hasNext(); ) {
-                final Header header = it.next();
+            incomingRequest.headerIterator().forEachRemaining(header -> {
                 if (!HOP_BY_HOP.contains(TextUtils.toLowerCase(header.getName()))) {
                     outgoingRequest.addHeader(header);
                 }
-            }
+            });
             outgoingRequest.setEntity(incomingRequest.getEntity());
             final ClassicHttpResponse incomingResponse = requester.execute(
                     targetHost, outgoingRequest, Timeout.ofMinutes(1), clientContext);
             outgoingResponse.setCode(incomingResponse.getCode());
-            for (final Iterator<Header> it = incomingResponse.headerIterator(); it.hasNext(); ) {
-                final Header header = it.next();
+            incomingResponse.headerIterator().forEachRemaining(header -> {
                 if (!HOP_BY_HOP.contains(TextUtils.toLowerCase(header.getName()))) {
                     outgoingResponse.addHeader(header);
                 }
-            }
+            });
             outgoingResponse.setEntity(incomingResponse.getEntity());
         }
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/PrintVersionInfo.java b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/PrintVersionInfo.java
index 85f1a6e1e..a38c10e52 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/examples/PrintVersionInfo.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/examples/PrintVersionInfo.java
@@ -27,6 +27,8 @@
 
 package org.apache.hc.core5.http.examples;
 
+import java.util.stream.Stream;
+
 import org.apache.hc.core5.util.VersionInfo;
 
 /**
@@ -53,11 +55,10 @@ public class PrintVersionInfo {
      *                  a list of packages for which to get version info.
      */
     public static void main(final String args[]) {
-        final String[]    pckgs = (args.length > 0) ? args : MODULE_LIST;
+        final String[] pckgs = (args.length > 0) ? args : MODULE_LIST;
         VersionInfo[] via = VersionInfo.loadVersionInfo(pckgs, null);
         System.out.println("version info for thread context classloader:");
-        for (int i=0; i<via.length; i++)
-            System.out.println(via[i]);
+        Stream.of(via).forEach(System.out::println);
 
         System.out.println();
 
@@ -65,11 +66,9 @@ public class PrintVersionInfo {
         // is different from that for the thread context classloader,
         // there may be a problem with multiple versions in the classpath
 
-        via = VersionInfo.loadVersionInfo
-            (pckgs, PrintVersionInfo.class.getClassLoader());
+        via = VersionInfo.loadVersionInfo(pckgs, PrintVersionInfo.class.getClassLoader());
         System.out.println("version info for static classloader:");
-        for (int i=0; i<via.length; i++)
-            System.out.println(via[i]);
+        Stream.of(via).forEach(System.out::println);
     }
 }
 
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/TestEnglishReasonPhraseCatalog.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/TestEnglishReasonPhraseCatalog.java
index ae89fb19e..49633d84a 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/TestEnglishReasonPhraseCatalog.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/TestEnglishReasonPhraseCatalog.java
@@ -45,9 +45,9 @@ public class TestEnglishReasonPhraseCatalog {
     public void testReasonPhrases() throws IllegalAccessException {
     final Field[] publicFields = HttpStatus.class.getFields();
 
-    Assertions.assertNotNull( publicFields );
+    Assertions.assertNotNull(publicFields);
 
-    Assertions.assertTrue( publicFields.length > 0 );
+    Assertions.assertTrue(publicFields.length > 0);
 
     for (final Field f : publicFields) {
         final int modifiers = f.getModifiers();
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java
index e822d4640..e87ef8fd5 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java
@@ -42,7 +42,7 @@ public class TestIdentityInputStream {
 
     @Test
     public void testBasicRead() throws Exception {
-        final byte[] input = new byte[] {'a', 'b', 'c'};
+        final byte[] input = {'a', 'b', 'c'};
         final ByteArrayInputStream inputStream = new ByteArrayInputStream(input);
         final SessionInputBuffer inBuffer = new SessionInputBufferImpl(16);
         final IdentityInputStream in = new IdentityInputStream(inBuffer, inputStream);
@@ -60,7 +60,7 @@ public class TestIdentityInputStream {
 
     @Test
     public void testClosedCondition() throws Exception {
-        final byte[] input = new byte[] {'a', 'b', 'c'};
+        final byte[] input = {'a', 'b', 'c'};
         final ByteArrayInputStream inputStream = new ByteArrayInputStream(input);
         final SessionInputBuffer inBuffer = new SessionInputBufferImpl(16);
         final IdentityInputStream in = new IdentityInputStream(inBuffer, inputStream);
@@ -76,7 +76,7 @@ public class TestIdentityInputStream {
 
     @Test
     public void testAvailable() throws Exception {
-        final byte[] input = new byte[] {'a', 'b', 'c'};
+        final byte[] input = {'a', 'b', 'c'};
         final ByteArrayInputStream inputStream = new ByteArrayInputStream(input);
         final SessionInputBuffer inBuffer = new SessionInputBufferImpl(new BasicHttpTransportMetrics(), 16, 16, 1024, null);
         final IdentityInputStream in = new IdentityInputStream(inBuffer, inputStream);
@@ -87,7 +87,7 @@ public class TestIdentityInputStream {
 
     @Test
     public void testAvailableInStream() throws Exception {
-        final byte[] input = new byte[] {'a', 'b', 'c', 'd', 'e', 'f'};
+        final byte[] input = {'a', 'b', 'c', 'd', 'e', 'f'};
         final ByteArrayInputStream inputStream = new ByteArrayInputStream(input);
         final SessionInputBuffer inBuffer = new SessionInputBufferImpl(new BasicHttpTransportMetrics(), 16, 0, 1024, null);
         final IdentityInputStream in = new IdentityInputStream(inBuffer, inputStream);
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityOutputStream.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityOutputStream.java
index 9c49c3760..b74e8e57f 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityOutputStream.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityOutputStream.java
@@ -81,7 +81,7 @@ public class TestIdentityOutputStream {
         final byte[] input = outputStream.toByteArray();
 
         Assertions.assertNotNull(input);
-        final byte[] expected = new byte[] {'a', 'b', 'c'};
+        final byte[] expected = {'a', 'b', 'c'};
         Assertions.assertEquals(expected.length, input.length);
         for (int i = 0; i < expected.length; i++) {
             Assertions.assertEquals(expected[i], input[i]);
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestSessionInOutBuffers.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestSessionInOutBuffers.java
index e6b25b79f..05cedf639 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestSessionInOutBuffers.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestSessionInOutBuffers.java
@@ -36,6 +36,7 @@ import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CodingErrorAction;
 import java.nio.charset.StandardCharsets;
+import java.util.stream.IntStream;
 
 import org.apache.hc.core5.http.MessageConstraintException;
 import org.apache.hc.core5.http.impl.BasicHttpTransportMetrics;
@@ -471,9 +472,7 @@ public class TestSessionInOutBuffers {
     private static String constructString(final int [] unicodeChars) {
         final StringBuilder buffer = new StringBuilder();
         if (unicodeChars != null) {
-            for (final int unicodeChar : unicodeChars) {
-                buffer.append((char)unicodeChar);
-            }
+            IntStream.of(unicodeChars).forEach(i -> buffer.append((char) i));
         }
         return buffer.toString();
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestSessionInOutBuffers.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestSessionInOutBuffers.java
index 7579a1fc5..b5fa0bd1c 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestSessionInOutBuffers.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestSessionInOutBuffers.java
@@ -39,6 +39,7 @@ import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CodingErrorAction;
 import java.nio.charset.StandardCharsets;
+import java.util.stream.IntStream;
 
 import org.apache.hc.core5.http.MessageConstraintException;
 import org.apache.hc.core5.http.nio.SessionInputBuffer;
@@ -449,9 +450,7 @@ public class TestSessionInOutBuffers {
     private static String constructString(final int [] unicodeChars) {
         final StringBuilder buffer = new StringBuilder();
         if (unicodeChars != null) {
-            for (final int unicodeChar : unicodeChars) {
-                buffer.append((char)unicodeChar);
-            }
+            IntStream.of(unicodeChars).forEach(i -> buffer.append((char) i));
         }
         return buffer.toString();
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestEntityUtils.java b/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestEntityUtils.java
index 111389b79..d59b0c12f 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestEntityUtils.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestEntityUtils.java
@@ -37,6 +37,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.IntStream;
 
 import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.HttpEntity;
@@ -135,9 +136,7 @@ public class TestEntityUtils {
     private static String constructString(final int [] unicodeChars) {
         final StringBuilder buffer = new StringBuilder();
         if (unicodeChars != null) {
-            for (final int unicodeChar : unicodeChars) {
-                buffer.append((char)unicodeChar);
-            }
+            IntStream.of(unicodeChars).forEach(i -> buffer.append((char) i));
         }
         return buffer.toString();
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestStringEntity.java b/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestStringEntity.java
index 819f7fa2e..abc4f6b13 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestStringEntity.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/io/entity/TestStringEntity.java
@@ -30,6 +30,7 @@ package org.apache.hc.core5.http.io.entity;
 import java.io.ByteArrayOutputStream;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
+import java.util.stream.IntStream;
 
 import org.apache.hc.core5.http.ContentType;
 import org.junit.jupiter.api.Assertions;
@@ -71,9 +72,7 @@ public class TestStringEntity {
     private static String constructString(final int [] unicodeChars) {
         final StringBuilder buffer = new StringBuilder();
         if (unicodeChars != null) {
-            for (final int unicodeChar : unicodeChars) {
-                buffer.append((char)unicodeChar);
-            }
+            IntStream.of(unicodeChars).forEach(i -> buffer.append((char) i));
         }
         return buffer.toString();
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderElementIterator.java b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderElementIterator.java
index 72dd92048..d38c818d9 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderElementIterator.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderElementIterator.java
@@ -42,7 +42,7 @@ public class TestBasicHeaderElementIterator {
 
     @Test
     public void testMultiHeader() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
                 new BasicHeader("Name", "value0"),
                 new BasicHeader("Name", "value1")
         };
@@ -67,7 +67,7 @@ public class TestBasicHeaderElementIterator {
 
     @Test
     public void testMultiHeaderSameLine() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
                 new BasicHeader("name", "value0,value1"),
                 new BasicHeader("nAme", "cookie1=1,cookie2=2")
         };
@@ -90,7 +90,7 @@ public class TestBasicHeaderElementIterator {
 
     @Test
     public void testFringeCases() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
                 new BasicHeader("Name", null),
                 new BasicHeader("Name", "    "),
                 new BasicHeader("Name", ",,,")
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderIterator.java b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderIterator.java
index 10e5eaffa..28f8406c3 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderIterator.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderIterator.java
@@ -42,7 +42,7 @@ public class TestBasicHeaderIterator {
 
     @Test
     public void testAllSame() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("Name", "value0"),
             new BasicHeader("nAme", "value1, value1.1"),
             new BasicHeader("naMe", "value2=whatever"),
@@ -77,7 +77,7 @@ public class TestBasicHeaderIterator {
 
     @Test
     public void testFirstLastOneNone() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("match"   , "value0"),
             new BasicHeader("mismatch", "value1, value1.1"),
             new BasicHeader("single"  , "value2=whatever"),
@@ -118,7 +118,7 @@ public class TestBasicHeaderIterator {
 
     @Test
     public void testInterspersed() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("yellow", "00"),
             new BasicHeader("maroon", "01"),
             new BasicHeader("orange", "02"),
@@ -229,7 +229,7 @@ public class TestBasicHeaderIterator {
     public void testRemaining() {
         // to satisfy Clover and take coverage to 100%
 
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("Name", "value0"),
             new BasicHeader("nAme", "value1, value1.1"),
             new BasicHeader("naMe", "value2=whatever"),
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderValueFormatter.java b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderValueFormatter.java
index 6d18d8850..de48ce26a 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderValueFormatter.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicHeaderValueFormatter.java
@@ -109,7 +109,7 @@ public class TestBasicHeaderValueFormatter {
         final NameValuePair param1 = new BasicNameValuePair("param", "regular_stuff");
         final NameValuePair param2 = new BasicNameValuePair("param", "this\\that");
         final NameValuePair param3 = new BasicNameValuePair("param", "this,that");
-        final NameValuePair[] params = new NameValuePair[] {param1, param2, param3};
+        final NameValuePair[] params = {param1, param2, param3};
 
         final CharArrayBuffer buf = new CharArrayBuffer(64);
 
@@ -129,7 +129,7 @@ public class TestBasicHeaderValueFormatter {
         final NameValuePair param2 = new BasicNameValuePair("param", "this\\that");
         final NameValuePair param3 = new BasicNameValuePair("param", "this,that");
         final NameValuePair param4 = new BasicNameValuePair("param", null);
-        final NameValuePair[] params = new NameValuePair[] {param1, param2, param3, param4};
+        final NameValuePair[] params = {param1, param2, param3, param4};
         final HeaderElement element = new BasicHeaderElement("name", "value", params);
 
         final CharArrayBuffer buf = new CharArrayBuffer(64);
@@ -150,7 +150,7 @@ public class TestBasicHeaderValueFormatter {
         final HeaderElement element3 = new BasicHeaderElement("name3", "value3", new NameValuePair[] {param3});
         final HeaderElement element4 = new BasicHeaderElement("name4", "value4", new NameValuePair[] {param4});
         final HeaderElement element5 = new BasicHeaderElement("name5", null);
-        final HeaderElement[] elements = new HeaderElement[] {element1, element2, element3, element4, element5};
+        final HeaderElement[] elements = {element1, element2, element3, element4, element5};
 
         final CharArrayBuffer buf = new CharArrayBuffer(64);
 
@@ -165,9 +165,9 @@ public class TestBasicHeaderValueFormatter {
     public void testInvalidArguments() throws Exception {
         final CharArrayBuffer buf = new CharArrayBuffer(64);
         final NameValuePair param = new BasicNameValuePair("param", "regular_stuff");
-        final NameValuePair[] params = new NameValuePair[] {param};
+        final NameValuePair[] params = {param};
         final HeaderElement element = new BasicHeaderElement("name1", "value1", null);
-        final HeaderElement[] elements = new HeaderElement[] {element};
+        final HeaderElement[] elements = {element};
 
         Assertions.assertThrows(NullPointerException.class, () ->
                 formatter.formatNameValuePair(null, param, false));
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicTokenIterator.java b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicTokenIterator.java
index e41f0252b..b8ef51ece 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicTokenIterator.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicTokenIterator.java
@@ -43,7 +43,7 @@ public class TestBasicTokenIterator {
 
     @Test
     public void testSingleHeader() {
-        Header[] headers = new Header[]{
+        Header[] headers = {
             new BasicHeader("Name", "token0,token1, token2 , token3")
         };
         Iterator<Header> hit = new BasicHeaderIterator(headers, null);
@@ -74,7 +74,7 @@ public class TestBasicTokenIterator {
 
     @Test
     public void testMultiHeader() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("Name", "token0,token1"),
             new BasicHeader("Name", ""),
             new BasicHeader("Name", "token2"),
@@ -102,7 +102,7 @@ public class TestBasicTokenIterator {
 
     @Test
     public void testEmpty() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("Name", " "),
             new BasicHeader("Name", ""),
             new BasicHeader("Name", ","),
@@ -123,7 +123,7 @@ public class TestBasicTokenIterator {
 
     @Test
     public void testValueStart() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("Name", "token0"),
             new BasicHeader("Name", " token1"),
             new BasicHeader("Name", ",token2"),
@@ -152,7 +152,7 @@ public class TestBasicTokenIterator {
 
     @Test
     public void testValueEnd() {
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("Name", "token0"),
             new BasicHeader("Name", "token1 "),
             new BasicHeader("Name", "token2,"),
@@ -182,7 +182,7 @@ public class TestBasicTokenIterator {
     public void testWrongPublic() {
         Assertions.assertThrows(NullPointerException.class, () -> new BasicTokenIterator(null));
 
-        final Header[] headers = new Header[]{
+        final Header[] headers = {
             new BasicHeader("Name", " "),
             new BasicHeader("Name", ""),
             new BasicHeader("Name", ","),
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java b/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java
index a28328780..dfe75fd3a 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java
@@ -584,7 +584,7 @@ public class TestStandardInterceptors {
 
         final ResponseConnControl interceptor = new ResponseConnControl();
 
-        final int [] statusCodes = new int[] {
+        final int [] statusCodes = {
                 HttpStatus.SC_BAD_REQUEST,
                 HttpStatus.SC_REQUEST_TIMEOUT,
                 HttpStatus.SC_LENGTH_REQUIRED,
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TLSTest.java b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TLSTest.java
index e9a2730a4..c25a23a5b 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TLSTest.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TLSTest.java
@@ -81,8 +81,7 @@ class TLSTest {
                 "TLS 1.2",
                 "TLS 1.1"
         };
-        final String[] strongProtocols = TLS.excludeWeak(mixProtocol);
-        for (final String protocol : strongProtocols) {
+        for (final String protocol : TLS.excludeWeak(mixProtocol)) {
             Assertions.assertTrue(TLS.isSecure(protocol));
         }
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java
index 8313b9e39..0af3159a7 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/ssl/TestTlsCiphers.java
@@ -85,8 +85,7 @@ public class TestTlsCiphers {
                "TLS_RSA_WITH_AES_256_GCM_SHA384"
        };
 
-       final String[] strongCipherSuites = TlsCiphers.excludeH2Blacklisted(mixCipherSuites);
-       for (final String cipherSuite : strongCipherSuites) {
+       for (final String cipherSuite : TlsCiphers.excludeH2Blacklisted(mixCipherSuites)) {
            Assertions.assertFalse(TlsCiphers.isWeak(cipherSuite));
        }
    }
@@ -117,8 +116,7 @@ public class TestTlsCiphers {
                 "TLS_RSA_WITH_AES_256_GCM_SHA384"
         };
 
-        final String[] strongCipherSuites = TlsCiphers.excludeWeak(weakCiphersSuites);
-        for (final String cipherSuite : strongCipherSuites) {
+        for (final String cipherSuite : TlsCiphers.excludeWeak(weakCiphersSuites)) {
             Assertions.assertFalse(TlsCiphers.isWeak(cipherSuite));
         }
     }
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/util/TestArgs.java b/httpcore5/src/test/java/org/apache/hc/core5/util/TestArgs.java
index af4be3bf0..3a52a6fe8 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/util/TestArgs.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/util/TestArgs.java
@@ -263,7 +263,7 @@ public class TestArgs {
     @Test
     public void testIsEmpty() {
 
-        final String[] NON_EMPTY_ARRAY = new String[] { "ABG", "NML", };
+        final String[] NON_EMPTY_ARRAY = { "ABG", "NML", };
 
         final List<String> NON_EMPTY_LIST = Arrays.asList(NON_EMPTY_ARRAY);
 
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/util/TestByteArrayBuffer.java b/httpcore5/src/test/java/org/apache/hc/core5/util/TestByteArrayBuffer.java
index 2d9a0e7ba..01173c3d1 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/util/TestByteArrayBuffer.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/util/TestByteArrayBuffer.java
@@ -64,7 +64,7 @@ public class TestByteArrayBuffer {
         Assertions.assertTrue(buffer.isEmpty());
         Assertions.assertFalse(buffer.isFull());
 
-        final byte[] tmp = new byte[] { 1, 2, 3, 4};
+        final byte[] tmp = { 1, 2, 3, 4};
         buffer.append(tmp, 0, tmp.length);
         Assertions.assertEquals(16, buffer.capacity());
         Assertions.assertEquals(4, buffer.length());
@@ -90,7 +90,7 @@ public class TestByteArrayBuffer {
         final ByteArrayBuffer buffer = new ByteArrayBuffer(4);
         Assertions.assertEquals(4, buffer.capacity());
 
-        final byte[] tmp = new byte[] { 1, 2, 3, 4};
+        final byte[] tmp = { 1, 2, 3, 4};
         buffer.append(tmp, 0, 2);
         buffer.append(tmp, 0, 4);
         buffer.append(tmp, 0, 0);
@@ -176,7 +176,7 @@ public class TestByteArrayBuffer {
         final ByteArrayBuffer buffer = new ByteArrayBuffer(4);
         buffer.append((byte[])null, 0, 0);
 
-        final byte[] tmp = new byte[] { 1, 2, 3, 4};
+        final byte[] tmp = { 1, 2, 3, 4};
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, -1, 0));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, -1));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, 8));
@@ -189,7 +189,7 @@ public class TestByteArrayBuffer {
         final ByteArrayBuffer buffer = new ByteArrayBuffer(4);
         Assertions.assertEquals(4, buffer.capacity());
 
-        final byte[] tmp = new byte[] { 1, 127, -1, -128, 1, -2};
+        final byte[] tmp = { 1, 127, -1, -128, 1, -2};
         for (final byte element : tmp) {
             buffer.append(element);
         }
@@ -291,7 +291,7 @@ public class TestByteArrayBuffer {
         final ByteArrayBuffer buffer = new ByteArrayBuffer(4);
         buffer.append((char[])null, 0, 0);
 
-        final char[] tmp = new char[] { '1', '2', '3', '4'};
+        final char[] tmp = { '1', '2', '3', '4'};
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, -1, 0));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, -1));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, 8));
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/util/TestCharArrayBuffer.java b/httpcore5/src/test/java/org/apache/hc/core5/util/TestCharArrayBuffer.java
index 1aa9f8dd9..483bf6961 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/util/TestCharArrayBuffer.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/util/TestCharArrayBuffer.java
@@ -63,7 +63,7 @@ public class TestCharArrayBuffer {
         Assertions.assertTrue(buffer.isEmpty());
         Assertions.assertFalse(buffer.isFull());
 
-        final char[] tmp = new char[] { '1', '2', '3', '4'};
+        final char[] tmp = { '1', '2', '3', '4'};
         buffer.append(tmp, 0, tmp.length);
         Assertions.assertEquals(16, buffer.capacity());
         Assertions.assertEquals(4, buffer.length());
@@ -91,7 +91,7 @@ public class TestCharArrayBuffer {
         final CharArrayBuffer buffer = new CharArrayBuffer(4);
         Assertions.assertEquals(4, buffer.capacity());
 
-        final char[] tmp = new char[] { '1', '2', '3', '4'};
+        final char[] tmp = { '1', '2', '3', '4'};
         buffer.append(tmp, 0, 2);
         buffer.append(tmp, 0, 4);
         buffer.append(tmp, 0, 0);
@@ -157,7 +157,7 @@ public class TestCharArrayBuffer {
         final CharArrayBuffer buffer = new CharArrayBuffer(4);
         buffer.append((char[])null, 0, 0);
 
-        final char[] tmp = new char[] { '1', '2', '3', '4'};
+        final char[] tmp = { '1', '2', '3', '4'};
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, -1, 0));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, -1));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, 8));
@@ -239,7 +239,7 @@ public class TestCharArrayBuffer {
 
     @Test
     public void testAppendISOByteArray() throws Exception {
-        final byte[] b = new byte[] {0x00, 0x20, 0x7F, -0x80, -0x01};
+        final byte[] b = {0x00, 0x20, 0x7F, -0x80, -0x01};
 
         final CharArrayBuffer buffer = new CharArrayBuffer(8);
         buffer.append(b, 0, b.length);
@@ -272,7 +272,7 @@ public class TestCharArrayBuffer {
         final CharArrayBuffer buffer = new CharArrayBuffer(4);
         buffer.append((byte[])null, 0, 0);
 
-        final byte[] tmp = new byte[] { '1', '2', '3', '4'};
+        final byte[] tmp = { '1', '2', '3', '4'};
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, -1, 0));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, -1));
         Assertions.assertThrows(IndexOutOfBoundsException.class, () -> buffer.append(tmp, 0, 8));