How to Convert a List or Set of String to comma separated String (CSV) in Java 8

Before Java 8, it was not straightforward to convert a list of String to a comma separated String. You have to loop through the collection or list and join them manually using String concatenation, which can take up more than 4 lines of code. Of course, you could encapsulate that into your own utility method and you should but JDK didn't provide anything useful for such a common operation. Btw, things have changed. From Java 8 onwards you can do this easily. JDK 8 has provided a utility class called StringJoiner as well as added a join() method into String class to convert a List, Set, Collection or even array of String objects to a comma separated String in Java.

This method accepts a delimiter and an Iterable which contains String. Since all Collection classes implement Iterable it's possible to join all String from a List or Set using a delimiter like a comma, colon, or even space.

Btw, like most of the things, you need to know some small details. For example, if your List or Set contains null then a "null" string will be added into final String, so please beware of that. If you don't want null, it's better to remove any nulls before joining strings from the list.

By the way, Java 8 is full of such awesome features which are often get ignored in the limelight of lambda expression, Stream API, new Date Time API, and other major features. If you are interested to learn more about such awesome features  I suggest you go through The Complete Java Masterclass on Udemy, one of the comprehensive course to learn Java.




List of String to Comma Separated String in Java

Here is an example of converting a list and set to a comma-separated String in Java 8:

package tool;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
* 
* A simple Java Program to to remove duplicates from Stream in Java 8
* This example uses Stream.distinct() method to remove
* duplicates. 
*/
public class Hello {

public static void main(String args[]) {

List<String> books = Arrays.asList("Effective Java", "Clean Code", 
"Java Concurrency in Practice");
System.out.println(books);

String bookString = String.join(",", books);
System.out.println(bookString);

Set<String> authors = new HashSet<>(Arrays.asList("Josh Bloch", "Uncle Bob Martin",
 "Brian Goetz"));
System.out.println(authors);

String authorString = String.join(",", books);
System.out.println(authorString);


}
}

Output
[Effective Java, Clean Code, Java Concurrency in Practice]
Effective Java,Clean Code,Java Concurrency in Practice
[Josh Bloch, Uncle Bob Martin, Brian Goetz]
Effective Java,Clean Code,Java Concurrency in Practice


You can see that if you directly print the list or set, all the elements are printed inside a bracket. Since we just need a CSV or comma separated String, we need to use the String.join() method and that's what we have done in this example.

The lines:

String bookString = String.join(",", books);

and

String authorString = String.join(",", books);

are the two lines which are doing all the work of joining all String from the list and set into one separated by a comma. If you want, you can change the delimiter to colon or space to create a different String based upon your requirement.

By the way, Java 8 is full of such hidden features which are often get ignored in the limelight of lambda expression, Stream API, and other major features. If you are interested to learn more about new Java 8 features I suggest you go through What's New in Java 8 on Udemy, one of the comprehensive course to learn Java.

How to Convert a List or Set of String to comma separated String (CSV) in Java 8



Important points

1. The String.join() method is only available from JDK 8 onwards. So, if you need to convert a list or set to a delimited String in an earlier version, you can loop through all the elements and join them manually using a StringBuffer or StringBuilder.

2. A "null" as String will be added to your output if your list or set contains a null element.

3. Since String.join() method accepts an Iterable, you can pass any Collection implementation to it e.g. List, Set, ArrayList, LinkedList, Vector, HashSet, TreeSet, LinkedHashSet etc.

4. The String.join() is a static method, so you don't need a String object to call this one.


That's all about how to convert a list of String to a comma separated String in Java. As I said, prefer String.join() if you are using Java 8 or higher version. You can also change the delimiter to any character or String you want. Just beware of null.

Further Learning
The Complete Java Masterclass
Java Fundamentals: The Java Language
Data Structures and Algorithms: Deep Dive Using Java


Other Java 8  Lambda and Stream Tutorials You may like

Thanks for reading this article so far. If you like this article, then please share with your friends and colleagues. If you have any questions or feedback then please drop a note.

No comments:

Post a Comment