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?
Stream. concat() method creates a concatenated stream in which the elements are all the elements of the first stream followed by all the elements of the second stream. The resulting stream is ordered if both of the input streams are ordered, and parallel if either of the input streams is parallel. The calls to Stream.
There are two ways to concatenate strings in Java: By + (String concatenation) operator. By concat() method.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With