Java 12 Collectors.teeing() - Working Examples


A Quick Guide to Collectors.teeing​() with examples added in JDK 12.

1. Overview

In this post, We will learn about new method teeing () added in Java 12 to Collectors class. Collectors class is in package java.util.stream.Collector and it is in java.base module.

Java 12 Collector.teeing​() Method with Example

2. Collectors.teeing ()

Returns a Collector that is a composite of two downstream collectors. Every element passed to the resulting collector is processed by both downstream collectors, then their results are merged using the specified merge function into the final result. 

The resulting collector functions do the following:

    supplier: creates a result container that contains result containers obtained by calling each collector's supplier

    accumulator: calls each collector's accumulator with its result container and the input element
    combiner: calls each collector's combiner with two result containers
    finisher: calls each collector's finisher with its result container, then calls the supplied merger and returns its result. 

The resulting collector is Collector.Characteristics.UNORDERED if both downstream collectors are unordered and Collector.Characteristics.CONCURRENT if both downstream collectors are concurrent.

2.1 Syntax:

public static  Collector teeing​(Collector downstream1, Collector downstream2, BiFunction merger)

2.2 Type Parameters

    T - the type of the input elements
    R1 - the result type of the first collector
    R2 - the result type of the second collector
    R - the final result type

2.3 Parameters

    downstream1 - the first downstream collector

    downstream2 - the second downstream collector
    merger - the function which merges two results into the single one

2.4 Returns

    a Collector which aggregates the results of two supplied collectors.

3. Example 1

Here taking two collectors named as joiningCollector and listCollector.

joiningCollector - Joins all given strings with delimiter '-'

listCollector - Adds the all given strings to List.

teeingCollector --> This takes two inputs from above two collectors output.

package examples.java.w3schools.java12.collectors;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CollectorsTeeingExample {

 public static void main(String[] args) {
  // Returns a Collector that concatenates the input elements,separated by the
  // specified delimiter, in encounter order.
  Collector joiningCollector = Collectors.joining("-");

  // Returns a Collector that accumulates the input elements into anew List.
  Collector> listCollector = Collectors.toList();

  Collector teeingCollector = Collectors.teeing(joiningCollector, listCollector,
    (joinedString, stringsList) -> {
     ArrayList list = new ArrayList<>(stringsList);
     String[] array = list.toArray(new String[0]);
     return array;
  String[] words = Stream.of("Java", "W3schools", "blog").collect(teeingCollector);
  System.out.println("Output of Collector teeing method in String[] Array : " + Arrays.toString(words));



This program compiles and runs successfully in JDK 12 or above Java 12 version.

Output of Collector teeing method in String[] Array : [Java, W3schools, blog, Java-W3schools-blog]

In the above program, 
joinedString is a String that joins all the strings in word array. The value in the String variable joinedString is "Java-W3schools-blog"
stringsList is a list that is created with the words string array. The values are the stringsList : [Java, W3schools, blog]

Now see the code inside teeingCollector, first two input paramters are output of joiningCollector, listCollector. The output of these two collectors are passed as input to the teeingCollector. After that, creating new ArrayList as named list with values stringsList and adding joinedString to the list. 

Finally, Converting list into String[] array because teeingCollector expecting String[] as output.

String[] array = list.toArray(new String[0]);

4. Example 2

Finding Average of first 10 numbers using Collector teeing Method: We will write a program to find the average of first 10 numbers using teeing method and another two collector methods such as summingDouble() and counting() method.

package examples.java.w3schools.java12.collectors;

import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.summingDouble;
import static java.util.stream.Collectors.teeing;

import java.util.stream.Stream;

public class TeeingCountExample {

 public static void main(String[] args) {
  // Converting 1 to 10 numbers into Stream integer array.
  Stream stream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

  // Calling teeing method.
  Double average = stream.collect(teeing(summingDouble(i -> i), counting(), (sum, n) -> sum / n));

  System.out.println("Average of first 10 numbers: " + average);

Here summingDouble(), counting(), teeing() methods are static methods in Collector class and we have used static import for class Collectors.


Average of first 10 numbers: 5.5

Other Examples on teeing collector using minBy, maxBy 

See the JDK JIRA ticket for Create Collector which merges results of two other collectors.

5. Conclusion

In this tutorial, We have covered new method that added in jdk 12 Collector class. Further discussed a few example programs on this method to merge two collectors output into one.


  1. This comment has been removed by a blog administrator.

Please do not add any spam links in the comments section.

About Us

Author: Venkatesh - I love to learn and share the technical stuff.

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,16,Arrays,7,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,5,Collections,22,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,81,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,4,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,3,Fast,1,Files,9,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,29,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,Java 8,66,Java 8 Difference,2,Java 8 Stream Conversions,2,java 8 Stream Examples,3,Java 9,1,Java Conversions,11,Java Design Patterns,1,Java Files,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Conversions,3,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Logging,1,Mac OS,2,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,21,String,58,String Programs,9,String Revese,1,Swing,1,System,1,Tags,1,Threads,10,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
JavaProgramTo.com: Java 12 Collectors.teeing() - Working Examples
Java 12 Collectors.teeing() - Working Examples
A Quick Guide to Collectors.teeing​() with examples added in JDK 12.
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content