将泛型应用于java.util.Function Function
您已声明您的将泛型应用于java.util.Function Function,java,generics,lambda,Java,Generics,Lambda,您已声明您的函数以获取映射看起来您想要的是创建一个函数,该函数将返回映射中包含的所有列表大小的总和 那样的话,你可以 Function<Map<?, ? extends List<?>>, Integer> countMap = (map)->{ ToIntFunction由于不关心映射键类型和列表类型,您可以按如下方式声明函数: ToIntFunction<Map<?, ? extends List<?>>> fu
函数
以获取映射看起来您想要的是创建一个函数,该函数将返回映射中包含的所有列表大小的总和
那样的话,你可以
Function<Map<?, ? extends List<?>>, Integer> countMap = (map)->{
ToIntFunction由于不关心映射键类型和列表类型,您可以按如下方式声明函数:
ToIntFunction<Map<?, ? extends List<?>>> function =
map -> map.values().stream().mapToInt(List::size).sum();
你到底想做什么?考虑更改为<代码>函数作为一个旁注,仅仅因为函数返回代码>整数< /代码>,你不必对函数中的局部变量使用<代码>整数< /代码>。您可以只使用int
,因为它足以装箱最终结果,而不是装箱每个中间结果。此外,永远不要迭代键来调用Map。如果可以,为每个映射获取,或者?如果类型未知,则扩展列表。由于只涉及列表大小,List
是可能的。@Jean-FrançoisSavard您是对的,您的选项可以更灵活地使用。我会编辑。如果我们正在编辑,你甚至不必坚持对象是List
s,?扩展集合
也可以…它甚至可以是一个?扩展集合而不是列表,因为.size()
来自集合
Function<Map<?, ? extends List<?>>, Integer> countMap = (map)->{
ToIntFunction<Map<?, ? extends List<?>>> function =
map -> map.values().stream().mapToInt(List::size).sum();
Function<Map<?, ? extends List<?>>, Integer> countMap;
countMap = m -> m.values().stream().mapToInt(List::size).sum();