【发布时间】:2019-09-21 23:02:46
【问题描述】:
我有一个自定义的排序地图。我想使用 map 函数转换地图中的每个值。我知道我可以使用 java 8 stream().map(function) 来实现这一点。但我想了解上面的 map(function) 是如何工作的并编写一个自定义函数。
我已经阅读了几篇文章,但我没有找到一篇解释清除的文章。
我是怎么做的:
SortedMap<String, Integer> items = new TreeMap();//TreeMap is a custom implementation
items.put("item1", 2);
items.put("item2", 1);
SortedMap<String, Integer> transformedItems=items.entrySet().stream().collect(
Collectors.toMap(
( Map.Entry<String, Integer> entry)->entry.getKey(),//pick each key as it is
( Map.Entry<String, Integer> entry)->entry.getValue()*2, //transform the value here.
(val1, val2) -> { throw new RuntimeException("Not expecting duplicate keys"); },
()->new TreeMap<>()
我想怎么做:
SortedMap<String, Integer> items = new TreeMap();
items.put("item1", 2);
items.put("item2", 1);
SortedMap<String, Integer> transformedItems=items.customMap(value->value*2)
这里的挑战是写customMap(function)
【问题讨论】:
-
@Andreas 我有 TreeMap 的自定义实现,所以我可以添加一个方法
-
如果您有自定义实现,则可以在答案中添加建议的方法,仅将
valueMapper作为参数。 -
SortedMap<String, Integer> result = new TreeMap(); items.forEach((key, value) -> result.put(key, yourFunction.apply(value)));这就是你想要的吗?这个逻辑并不是一个神奇的秘密。这是right in the official documentation。
标签: java collections java-stream