Hello,
First of all, this is the first time I am sending a mail to any java mailing
list, so please correct me if I did something wrong.
I am a regular visitor and answered on stackoverflow (
http://stackoverflow.com/users/2057294/skiwi ) and noticed that there are quite
a large amount of questions now already asking for a way to easily replace
values in maps when their type fundamentally changes.
I however also have a few concerns while doing this, which will be listed below.
Take first as example the following code, it may not be the best example, but
it should show the intention:
Map<String, Integer> map = new HashMap<>();
map.put("test", 5);
Map<String, String> mapped = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry ->
String.valueOf(entry.getValue())));
The intention here was to map the integer values to their string counterparts
in a single map, functionally this is equivalent to the following:
Map<String, Integer> map = new HashMap<>();
map.put("test", 5);
map.replaceAll((k, v) -> v + 1);
One would expect the first case to also be a one-liner, possibly somewhat like:
Map<String, String> mapped = map.replaceAllSpecial((k, v) -> String.valueOf(v));
Based on this I have the following concerns:
1. How would the method exactly need to look like? Should it also have the
option to take a Function<V_IN, V_OUT> valueMapper as argument?
2. How could this be optimized? Surely we do not *really* want to take all map
entries out of one map and insert the modified value in a new map, I was
thinking that an in-place modification would be the best, but then you have the
issue where the type changes.
Lastly, I hope that we can agree on that for such a trivial usecase, the usage
of streams is possibly too complicated and furthermore point (2) is very
important.
As some more reference, here are some of the stackoverflow questions that ask
for it:
-
http://stackoverflow.com/questions/23213891/how-to-map-values-in-a-map-in-java-8
-
http://stackoverflow.com/questions/22840170/in-java-8-functional-style-how-can-i-map-the-values-over-a-java-util-map
Regards,
Frank van Heeswijk