【问题标题】:map values in SortedMapSortedMap 中的映射值
【发布时间】:2019-04-10 00:57:36
【问题描述】:

我有以下方法来映射地图中的值:

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))));
  }

这里建议:https://stackoverflow.com/a/25905196/411965

我想创建一个类似于 SortedMap 的方法:

public static <X, Y, Z> SortedMap<X, Z> transformValues(SortedMap<? extends X, ? extends Y> input, Function<Y, Z> function)

使用 java 8 的方法是什么?

【问题讨论】:

  • Collectors 实用程序类提供了一个 toMap 重载,允许您使用 Supplier 参数化所需的 Map 类型 - 请参阅 here

标签: java collections


【解决方案1】:

没有流的替代解决方案:

SortedMap<X, Z> output = new TreeMap<>();
input.forEach((x, y) -> output.put(x, function.apply(y)));

这种方法不会遍历键集以稍后对每个键执行查找。相反,它直接迭代映射并将每个键值对放入outputSortedMap,使用function 预先转换值。它也更简洁易读,IMO。

【讨论】:

    【解决方案2】:

    您可以收集到实现SortedMapTreeMap

    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));
    
    }
    

    【讨论】:

    • 如何复制密钥?参数是map,函数是identity。
    猜你喜欢
    • 2012-11-28
    • 2021-12-16
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多