代码之家  ›  专栏  ›  技术社区  ›  Sam

Guava的Multimaps类的index()函数在内部是如何工作的?

  •  2
  • Sam  · 技术社区  · 7 年前

    我在努力理解 Multimaps 类别的 index 作用如果我想像HashMap一样使用它,那么我可以将多个值放在一个键上,然后用同一个键检索它们。

    但是如果我想根据一些标准对数据进行分组,那么Multimaps实现如下 this 已使用。

    现在我对下面的索引函数声明有疑问。

    public static <K,V> ImmutableListMultimap<K,V> index(Iterator<V> values, Function<? super V,K> keyFunction)
    

    如果要返回ImmutableListMultimap <K,V> 那么为什么函数的类型声明为 <? super V,K> ,哪个正好相反?

    此外,类型函数的匿名内部类是如何工作的,如中所示 实例我无法理解是谁调用了匿名内部类函数中定义的apply方法?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Thomas Kläger    6 年前

    如果要返回ImmutableListMultimap,请使用<K、 V>那么为什么函数的类型声明为<?超级V,K>,哪个正好相反?

    多重映射有两个类型参数 K 钥匙和 V 对于值。这个 index 方法具有参数 Iterator<V> values (显然是价值观)和 Function<? super V,K> keyFunction (用于为值生成键)。

    这意味着 keyFunction 必须接受值(类型 五、 或者它的一个超类型,因为您可以传递类型的任何值 五、 到接受超类型的方法 五、 )它必须返回键(类型 K )对于该值。这将导致类型 Function<? super V,K> .

    此外,类型函数的匿名内部类是如何工作的,如中所示 this 实例我无法理解是谁调用了匿名内部类函数中定义的apply方法?

    如果您查看 指数 方法( https://github.com/google/guava/blob/v23.0/guava/src/com/google/common/collect/Multimaps.java#L1630 ),您将看到第1637行 指数 方法调用 keyFunction.apply(value)