Java 8 StringJoiner – Old Wine With a New Bottle

SmartTechie_StringJoiner

Ultimately Java 8 is shipped with StringJoiner class under java.util package. I don’t think it is a very different implementation to join the strings compared to our old school approach by using StringBuffer/StringBuilder. We will see the usage of the StringJoiner and the internal implementation of it.

For example, I have two strings as “Smart” and “Techie” and I want to join those Strings as [Smart, Techie]. In this case, I have prefix as “[“, suffix as “]” and the delimiter as “,”. StringJoiner has two constructors as given below.


StringJoiner(CharSequence delimiter)


StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

We want to have prefix and suffix, hence we will use the second constructor for our example.

StringJoiner sjr = new StringJoiner(",", "[", "]");
sjr.add("Smart").add("Techie");
System.out.println("The final Joined string is " + sjr);

If we don’t want to have the prefix and suffix, then

StringJoiner sjr1 = new StringJoiner(",");
sjr1.add("Smart").add("Techie");
System.out.println("The final Joined string is " + sjr1);

Now, we will see the implementation of add and toString() method.

public StringJoiner add(CharSequence newElement) {
   prepareBuilder().append(newElement);
   return this;
}

The prepareBuilder() implementation is given below.

private StringBuilder prepareBuilder() {
    if (value != null) {
       value.append(delimiter);
    } else {
       value = new StringBuilder().append(prefix);
    }
    return value;
  }

From the above implementations, it is evident that the StringJoiner follows the old school approach.

The toString() implementation is given below.

public String toString() {
    if (value == null) {
      return emptyValue;
    } else {
    if (suffix.equals("")) {
      return value.toString();
    } else {
    int initialLength = value.length();
    String result = value.append(suffix).toString();
    // reset value to pre-append initialLength
    value.setLength(initialLength);
    return result;
   }
  }
}

Happy Learning!!!

Siva Janapati is an Architect with experience in building Cloud Native Microservices architectures, Reactive Systems, Large scale distributed systems, and Serverless Systems. Siva has hands-on in architecture, design, and implementation of scalable systems using Cloud, Java, Go lang, Apache Kafka, Apache Solr, Spring, Spring Boot, Lightbend reactive tech stack, APIGEE edge & on-premise and other open-source, proprietary technologies. Expertise working with and building RESTful, GraphQL APIs. He has successfully delivered multiple applications in retail, telco, and financial services domains. He manages the GitHub(https://github.com/2013techsmarts) where he put the source code of his work related to his blog posts.

Tagged with: ,
Posted in Java
2 comments on “Java 8 StringJoiner – Old Wine With a New Bottle
  1. Alok Chaudhary says:

    Why StringJoiner written in this way?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

DZone

DZone MVB

Java Code Geeks
Java Code Geeks
%d bloggers like this: