diff --git a/src/main/java/tools/jackson/databind/util/JacksonCollectors.java b/src/main/java/tools/jackson/databind/util/JacksonCollectors.java
new file mode 100644
index 0000000000..efe70ef1df
--- /dev/null
+++ b/src/main/java/tools/jackson/databind/util/JacksonCollectors.java
@@ -0,0 +1,38 @@
+package tools.jackson.databind.util;
+
+import java.util.stream.Collector;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.node.ArrayNode;
+import tools.jackson.databind.node.JsonNodeCreator;
+import tools.jackson.databind.node.JsonNodeFactory;
+
+/**
+ * Utility class that provides custom {@link Collector} implementations to support Stream operations.
+ *
+ * This class is not meant to be instantiated and serves only as a utility class.
+ *
+ *
+ * @since 2.18
+ */
+public abstract class JacksonCollectors {
+ /**
+ * Creates a {@link Collector} that collects {@link JsonNode} elements into an {@link ArrayNode}.
+ *
+ * This method uses a {@link JsonNodeFactory} to create an empty {@link ArrayNode} and then adds each
+ * {@link JsonNode} to it.
+ *
+ *
+ * @return a {@link Collector} that collects {@link JsonNode} elements into an {@link ArrayNode}
+ */
+ public static Collector toJsonNode() {
+ return toJsonNode(JsonNodeFactory.instance);
+ }
+
+ public static Collector toJsonNode(JsonNodeCreator nodeCreator) {
+ return Collector.of(
+ nodeCreator::arrayNode, // supplier
+ ArrayNode::add, // accumulator
+ ArrayNode::addAll // combiner
+ );
+ }
+}
diff --git a/src/test/java/tools/jackson/databind/util/JacksonCollectorsTest.java b/src/test/java/tools/jackson/databind/util/JacksonCollectorsTest.java
new file mode 100644
index 0000000000..cedc044060
--- /dev/null
+++ b/src/test/java/tools/jackson/databind/util/JacksonCollectorsTest.java
@@ -0,0 +1,33 @@
+package tools.jackson.databind.util;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+import java.util.stream.IntStream;
+import org.junit.jupiter.api.Test;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.node.ObjectNode;
+
+public class JacksonCollectorsTest {
+
+ @Test
+ public void testToJsonNode()
+ {
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ final JsonNode jsonNodeResult = IntStream.range(0, 10)
+ .mapToObj(i -> {
+ ObjectNode objectNode = objectMapper.createObjectNode();
+ objectNode.put("testString", "example");
+ objectNode.put("testNumber", i);
+ objectNode.put("testBoolean", true);
+
+ return objectNode;
+ })
+ .collect(JacksonCollectors.toJsonNode());
+
+ assertEquals(10, jsonNodeResult.size());
+ jsonNodeResult.forEach(jsonNode -> assertFalse(jsonNode.isEmpty()));
+ }
+}