[stream-api] Parameter pro Typ zählen

Natac

Bekanntes Mitglied
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:

Java:
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:
Java:
class Parameter{
  private ParameterType type;
  ParameterType getType(){return type;}
}

enum ParameterType { A,B,C,D,E }
 
Nein geht auch einfacher:

Java:
public static Map<ParameterType, Long> countTypes(final Collection<Parameter> params) {
	return params.stream().collect(Collectors.groupingBy(Parameter::getType, Collectors.counting()));
}
 

Neue Themen


Zurück
Oben