I have a map with Integer
keys and values. I need to transform it into a String
with this specific format: key1 - val1, key2 - val2, key3 - val3
. Now, I'm using forEach
to format each element, collect them into a List, and then do String.join();
List<String> ships = new ArrayList<>(4);
for (Map.Entry<Integer, Integer> entry : damagedMap.entrySet())
{
ships.add(entry.getKey() + " - " + entry.getValue());
}
result = String.join(",", ships);
Is there any shorter way to do it? And it would be good to do it with lambda, because I need some practice using lambdas.
I think you're looking for something like this:
To go through the bits in turn:
entrySet()
gets an iterable sequence of entriesstream()
creates a stream for that iterablemap()
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 useTreeMap
to get the values in key order.