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



我正在尝试了解多映像类的索引函数。如果我想像哈希姆普一样使用它,那么我可以将多个值放在键上并用相同的键检索它们。

但是,如果我想根据某些标准对数据进行分组,则使用这样的多图像实现。

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

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

如果要用<K,V>返回ImmutablelistMultImap,那么函数为什么具有<? super V,K>的类型声明,哪个完全相反?

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

如果要使用&lt; k,v>返回ImmutablelistMultImap,那么为什么函数具有类型的声明&lt;?超级V,K>,哪个完全相反?

一个多件图具有两个类型参数K的键和值的Vindex方法具有参数Iterator<V> values(显然是为值)和Function<? super V,K> keyFunction(用于为值生成键)。

这意味着keyFunction必须接受(类型V或其supertypes之一),因为您可以将V类型的任何值传递给接受V sepertype的方法,并且必须返回键(为该值键入K)。这导致了Function<? super V,K>类型。

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

如果您查看index方法的实现(https://github.com/google/guava/guava/buob/v23.0/guava/guava/src/src/com/google/common/common/colmon/collect/multect/multimaps.java#l1630),您将看到index方法调用keyFunction.apply(value)

的第1637行

最新更新