[stream-api] Parameter pro Typ zählen

Ich habe eine Liste von Parametern. Jeder Parameter hat einen ParameterTyp. Ich möchte nun eine Map haben, in der steht wie oft ein Typ in der Liste vorkommt.

Mein Ansatz mit der Stream-API:

Map<ParameterType, Integer> countTypes(final Collection<Parameter> parameters) {
        return parameters.stream()
        .collect(Collectors.toMap(
        /* key */key -> key.getType(), // type = key
        /* val */val -> Integer.valueOf((int) // count all parameters of same type
                parameters.stream()
                .filter(p -> p.getType() == val.getType())
                .count())
        ));
    }```

Funktioniert auch, sieht nur reichlich kompliziert aus. Dachte vielleicht kennt jemand einen Weg, dies irgendwie einfach zu lösen? Ideen dazu?

Parameter und ParameterType sehen in etwas so aus:
```class Parameter{
  private ParameterType type;
  ParameterType getType(){return type;}
}

enum ParameterType { A,B,C,D,E }

So gehts (beachte: Anzahl ist Long):

        return parameters.stream().collect(Collectors.groupingBy(Parameter::getType, Collectors.counting()));
}```

Edit:
Um auf Integer zu mappen, kann man die Implementierung von counting kopieren, anpassen und einfügen:
```Map<ParameterType, Integer> countTypes(final Collection<Parameter> parameters) {
        return parameters.stream().collect(Collectors.groupingBy(Parameter::getType, Collectors.reducing(0, e -> 1, Integer::sum)));
}```

Mit statischen Imports sieht das noch etwas lesbarer aus.