Using lambda to format Map into String
I think you're looking for something like this:
import java.util.*;
import java.util.stream.*;
public class Test {
public static void main(String[] args) throws Exception {
Map<Integer, String> map = new HashMap<>();
map.put(1, "foo");
map.put(2, "bar");
map.put(3, "baz");
String result = map.entrySet()
.stream()
.map(entry -> entry.getKey() + " - " + entry.getValue())
.collect(Collectors.joining(", "));
System.out.println(result);
}
}
To go through the bits in turn:
-
entrySet()
gets an iterable sequence of entries -
stream()
creates a stream for that iterable -
map()
converts that stream of entries into a stream of strings of the form "key - value" -
collect(Collectors.joining(", "))
joins all the entries in the stream into a single string, using", "
as the separator.Collectors.joining
is a method which returns aCollector
which can work on an input sequence of strings, giving a result of a single string.
Note that the order is not guaranteed here, because HashMap
isn't ordered. You might want to use TreeMap
to get the values in key order.