Over a million developers have joined DZone.

Convert a List to a Comma-Separated String in Java 8

This quick tutorial shows you how to use streams in Java to convert the contents of a list to a comma-separated string in Java 8.

· Java Zone

Microservices! They are everywhere, or at least, the term is. When should you use a microservice architecture? What factors should be considered when making that decision? Do the benefits outweigh the costs? Why is everyone so excited about them, anyway?  Brought to you in partnership with IBM.

Converting a List<String> to a String with all the values of the List comma separated in Java 8 is really straightforward. Let’s have a look how to do that.

In Java 8

We can simply write String.join(..), pass a delimiter and an Iterable and the new StringJoiner will do the rest:

List<String> cities = Arrays.asList("Milan", 
                                    "London", 
                                    "New York", 
                                    "San Francisco");

String citiesCommaSeparated = String.join(",", cities);

System.out.println(citiesCommaSeparated);

//Output: Milan,London,New York,San Francisco

If we are working with stream we can write as follow and still have the same result:

String citiesCommaSeparated = cities.stream()
                                    .collect(Collectors.joining(","));


System.out.println(citiesCommaSeparated);

//Output: Milan,London,New York,San Francisco

Note: you can statically import java.util.stream.Collectors.joining if you prefer just typing "joining".

In Java 7

For old times' sake, let’s have a look at the Java 7 implementation:

private static final String SEPARATOR = ",";

public static void main(String[] args) {
  List<String> cities = Arrays.asList(
                                "Milan", 
                                "London", 
                                "New York", 
                                "San Francisco");

  StringBuilder csvBuilder = new StringBuilder();

  for(String city : cities){
    csvBuilder.append(city);
    csvBuilder.append(SEPARATOR);
  }

  String csv = csvBuilder.toString();
  System.out.println(csv);

  //OUTPUT: Milan,London,New York,San Francisco,

  //Remove last comma
  csv = csv.substring(0, csv.length() - SEPARATOR.length());

  System.out.println(csv);

  //OUTPUT: Milan,London,New York,San Francisco
}

As you can see it’s much more verbose and easier to make mistakes like forgetting to remove the last comma. You can implement this in several ways—for example by moving the logic that removes the last comma to inside the for-loop—but no implementation will be so explicative and easy to understand as the declarative solution expressed in Java 8.

Focus should be on what you want to do—joining a List of String—not on how.

Java 8: Manipulate String Before Joining

If you are using Stream, it's really straightforward manipulate your String as you prefer by using map() or cutting some String out by using filter().  I’ll cover those topics in future articles. Meanwhile, this a straightforward example on how to transform the whole String to upper-case before joining.

Java 8: From List to Upper-Case String Comma Separated

String citiesCommaSeparated = cities.stream()
                                    .map(String::toUpperCase)
                                    .collect(Collectors.joining(","));

//Output: MILAN,LONDON,NEW YORK,SAN FRANCISCO

If you  want to find out more about stream, I strongly suggest this cool video from Venkat Subramaniam.

Let’s Play

The best way to learn is playing! Copy this class with all the implementations discussed and play with that. There is already a small test for each of them.

package net.reversecoding.examples;

import static java.util.stream.Collectors.joining;
import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.List;

import org.junit.Test;

public class CsvUtil {
private static final String SEPARATOR = ",";


public static String toCsv(List<String> listToConvert){
return String.join(SEPARATOR, listToConvert);
}

@Test
public void toCsv_csvFromListOfString(){
List<String> cities = Arrays.asList(
"Milan", "London", "New York", "San Francisco");

String expected = "Milan,London,New York,San Francisco";

assertEquals(expected, toCsv(cities));
}


public static String toCsvStream(List<String> listToConvert){
return listToConvert.stream()
.collect(joining(SEPARATOR));
}

@Test
public void toCsvStream_csvFromListOfString(){
List<String> cities = Arrays.asList(
"Milan", "London", "New York", "San Francisco");

String expected = "Milan,London,New York,San Francisco";

assertEquals(expected, toCsv(cities));
}

public static String toCsvJava7(List<String> listToConvert){
StringBuilder csvBuilder = new StringBuilder();

for(String s : listToConvert){
csvBuilder.append(s);
csvBuilder.append(SEPARATOR);
}

String csv = csvBuilder.toString();

//Remove last separator
if(csv.endsWith(SEPARATOR)){
csv = csv.substring(0, csv.length() - SEPARATOR.length());
}

return csv;
}

@Test
public void toCsvJava7_csvFromListOfString(){
List<String> cities = Arrays.asList(
"Milan", "London", "New York", "San Francisco");

String expected = "Milan,London,New York,San Francisco";

assertEquals(expected, toCsvJava7(cities));
}


public static String toUpperCaseCsv(List<String> listToConvert){
return listToConvert.stream()
.map(String::toUpperCase)
.collect(joining(SEPARATOR));
}

@Test
public void toUpperCaseCsv_upperCaseCsvFromListOfString(){
List<String> cities = Arrays.asList(
"Milan", "London", "New York", "San Francisco");

String expected = "MILAN,LONDON,NEW YORK,SAN FRANCISCO";

assertEquals(expected, toUpperCaseCsv(cities));
}

}

Discover how the Watson team is further developing SDKs in Java, Node.js, Python, iOS, and Android to access these services and make programming easy. Brought to you in partnership with IBM.

Topics:
string ,java

Published at DZone with permission of Mario Pio Gioiosa, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}