yas*_*eco 5 java java-8 java-stream
我有一个接受的泛型函数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))));
}
Run Code Online (Sandbox Code Playgroud)
输出为:
System.out.println (mapper(Arrays.asList("a","a","bb"),Function.identity(),String::length,i->i*i));
Run Code Online (Sandbox Code Playgroud)
是
{bb=4, a=2}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |