我有一个接受的通用功能Collection<? extends T> ts
。
我还通过:
Function<? extends T, ? extends K> classifier
其中每个项目映射T
到一个键K
(可能有重复)
Function<? extends T, Integer> evaluator
这给该项目的整数值。
该函数本身有一个内置的计算(” int to int
“),对每个生产Integer
(可能是像平方在我们的例子)
最后,我想总结的所有值的每个关键。
所以,最终的结果是:Map<K, Integer>
。
例如,
假设我们有列表["a","a", "bb"]
和我们使用Function.identity
进行分类,String::length
评估和平方的内置功能。然后返回的地图将是:{"a": 2, "b": 4}
我怎样才能做到这一点?(我想,优选地使用Collectors.groupingBy
)
下面是做这件事:
public static <T,K> Map<K,Integer> mapper (
Collection<T> ts,
Function<T, K> classifier,
Function<T, Integer> evaluator,
Function<Integer,Integer> calculator)
{
return
ts.stream()
.collect(Collectors.groupingBy(classifier,
Collectors.summingInt(t->evaluator.andThen(calculator).apply(t))));
}
输出为:
System.out.println (mapper(Arrays.asList("a","a","bb"),Function.identity(),String::length,i->i*i));
是
{bb=4, a=2}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句