Coletor de estatísticas generalizado com interface funcional

Java Hard generics

Tarefa «Coletor de estatísticas generalizado com interface funcional»

Implemente uma classe parametrizada `StatisticsCollector<T>`, que aceita objetos arbitrários e calcula estatísticas: quantidade, soma (se T extends Number, caso contrário null), mínimo e máximo (se T extends Comparable). Implemente adicionalmente o método `filter(Predicate<T>)`, que retorna um novo StatisticsCollector com os objetos que passaram pelo filtro. Dados de entrada: um número n, em seguida n linhas, cada linha contém um número inteiro ou uma string (sem espaços). Após coletar todos os elementos, exiba as estatísticas: count, sum (para números), min, max (se Comparable). Se o tipo não suportar a operação, exiba "N/A". Use generics e wildcards.

Formato de Entrada

Na primeira linha, um número inteiro n (1 ≤ n ≤ 1000). Em seguida, n linhas, cada uma contendo um valor (número inteiro ou string).

Formato de Saída

Para os objetos coletados, exiba 4 linhas: count, sum ("N/A" se não forem números), min ("N/A" se não for Comparable), max ("N/A" se não for Comparable).

Exemplos

Exemplo 1

ENTRADA
3 100 hello 200
SAÍDA
3 300 100 200
main.java