Java arroyos con los genéricos

Seco:

Tengo una función genérica que acepta Collection<? extends T> ts.

También estoy pasando:

Function<? extends T, ? extends K> classifierque mapea cada elemento Ta una tecla K(posible tener duplicados)

Function<? extends T, Integer> evaluator lo que da un valor entero para el elemento.

La función en sí tiene un built-in de cálculo (" int to int") para cada producido Integer(podría ser algo así como la cuadratura para nuestro ejemplo)

Por último, me gustaría resumir todos los valores para cada tecla.

Por lo que el resultado final es: Map<K, Integer>.

Por ejemplo,
supongamos que tenemos la lista ["a","a", "bb"]y se utiliza Function.identitypara clasificar, String::lengthevaluar y elevar al cuadrado como el incorporado en la función. A continuación, el mapa devuelto será:{"a": 2, "b": 4}

¿Cómo puedo hacer eso? (Supongo que preferiblemente usando Collectors.groupingBy)

Eran :

He aquí una manera de hacerlo:

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))));
}

La salida para:

System.out.println (mapper(Arrays.asList("a","a","bb"),Function.identity(),String::length,i->i*i));

es

{bb=4, a=2}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=179647&siteId=1
Recomendado
Clasificación