Java 在SortedMap中映射值

Java 在SortedMap中映射值,java,collections,Java,Collections,我使用以下方法在映射中映射值: public static <X, Y, Z> Map<X, Z> transformValues(Map<? extends X, ? extends Y> input, Function<Y, Z> function) { return input.keySet().stream() .collect(Collectors.toMap(Function.identity(),

我使用以下方法在映射中映射值:

public static <X, Y, Z> Map<X, Z> transformValues(Map<? extends X, ? extends Y> input, Function<Y, Z> function) {
    return input.keySet().stream()
      .collect(Collectors.toMap(Function.identity(),
        key -> function.apply(input.get(key))));
  }

publicstaticmap-transformValues(Map您可以收集到一个实现
SortedMap
TreeMap

public static <X, Y, Z> SortedMap<X, Z> transformValues(Map<? extends X, ? extends Y> input, Function<Y, Z> function) {
    return input.keySet()
                .stream()
                .collect(Collectors.toMap(Function.identity(),
                                          key -> function.apply(input.get(key)),
                                          (v1, v2) -> {
                                              return v1;
                                          }, TreeMap::new));

}

public static SortedMap transformValues(MapAl无流替代解决方案:

SortedMap<X, Z> output = new TreeMap<>();
input.forEach((x, y) -> output.put(x, function.apply(y)));
SortedMap输出=新树映射();
input.forEach((x,y)->output.put(x,function.apply(y));

这种方法不会在键集上迭代,以便以后对每个键执行查找。相反,它直接迭代映射,并将每个键值对放入
输出
SortedMap
,使用
函数
预先转换值。在我看来,它也更简洁易读。

收集器
utility类提供了一个
toMap
重载,允许您使用
供应商
为所需的
映射
类型进行参数化-请参阅。如何复制密钥?参数是映射,函数是标识。
SortedMap<X, Z> output = new TreeMap<>();
input.forEach((x, y) -> output.put(x, function.apply(y)));