Function<Map<?,List>,Integer> countMap = (Map)->{
Integer count = 0;
for(Object key:Map.keySet()){
count+=Map.get(key).size();
}
return count;
};
Integer test = countMap.apply(containedAssets);
我收到编译错误:apply(java.util.Map<?,List>> in Function cannot be applied to java.util.Map<java.util.String,List<myClass>>
。这种操作是否仅仅被功能禁止?我在没有Map的情况下尝试了不同的代码,只使用了一个列表,Java可以毫无困难地获取任何类型的列表。
答案 0 :(得分:8)
看起来你想要的是创建一个函数,它将返回Map<K, List<V>>
中包含的所有列表大小的总和。
在这种情况下,你可以
ToIntFunction<Map<?, ? extends List<?>>> function =
map -> map.values().stream().mapToInt(List::size).sum();
我们可以使用ToIntFunction
作为返回整数的函数,而不是Function<...,Integer>
。然后,您可以使用Stream API以更简单的方式编写方法的其余部分:获取地图的值,将每个值映射到由其大小组成的IntStream
并将元素加在一起。
答案 1 :(得分:5)
您已声明Function
采用Map<?,List>
类型List
为原始的List<myClass>
。但是,从您的错误消息中,您已通过Function
。
使用类型参数List<myClass>
声明您的Function<Map<?,List<MyClass>>,Integer> countMap = (map)->{
,即遵循正常的Java命名约定:
size()
由于只调用Function
,List
并不关心? extends List<?>
的类型参数,因此为了使其更灵活,您可以将其替换为Function<Map<?, ? extends List<?>>, Integer> countMap = (map)->{
},正如评论中提到的那样。
main