How to concatenate a string with the new 1.8 stream API

JavaJava 8Java Stream

Java Problem Overview


Lets say we have a simple method that should concat all names of a Person collection and return the result string.

public String concantAndReturnNames(final Collection<Person> persons) {
	String result = "";
	for (Person person : persons) {
		result += person.getName();
	}
	return result;
}

Is there a way to write this code with new stream API forEach function in 1 line?

Java Solutions


Solution 1 - Java

The official documentation for what you want to do: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html

 // Accumulate names into a List
 List<String> list = people.stream().map(Person::getName).collect(Collectors.toList());

 // Convert elements to strings and concatenate them, separated by commas
 String joined = things.stream()
                       .map(Object::toString)
                       .collect(Collectors.joining(", "));

For your example, you would need to do this:

 // Convert elements to strings and concatenate them, separated by commas
 String joined = persons.stream()
                       .map(Person::getName) // This will call person.getName()
                       .collect(Collectors.joining(", "));

The argument passed to Collectors.joining is optional.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZeDonDinoView Question on Stackoverflow
Solution 1 - JavaThomas BetousView Answer on Stackoverflow