Ich möchte folgendeJava Streams verwandeln Karte von EnumMap in eine Karte von Listen
enum Parameter {Foo, Bar, Baz};
Map<String, EnumMap<Parameter, String>> myMap = new HashMap(){{
put("KEY1", new EnumMap<>(Parameter.class) {{
put(Parameter.Foo, "BAD");
put(Parameter.Bar, "GOOD");
put(Parameter.Baz, "BAD");
}});
put("KEY2", new EnumMap<>(Parameter.class) {{
put(Parameter.Foo, "BAD");
put(Parameter.Bar, "GOOD");
put(Parameter.Baz, "GOOD");
}});
}};
in ein gefiltertes Karte umwandeln, wo der Filter nur entweder die
Map<String, List<Entry<Parameter, String>>> mapList
Wo die resultierende Liste enthält sollte die Zeilen mit "GOOD" als Filterkriterium enthalten.
Ich kann nicht die richtige Stromsyntax herauszufinden, dies zu tun, ich weiß, sie entlang der folgenden Zeilen:
Map<String, List<Entry<Parameter, String>>> mapList =
myMap.entrySet().stream().groupingBy(e -> e.getKey()).collect(Collectors.toMap(????)
ich fragen müssen, warum hast du so gekünstelt Code beginnen mit? Eine Karte einer EnumMap und Sie möchten eine Karte der Liste der Karteneinträge erstellen? Wäre es nicht besser, richtige Objekte zu haben? – Tunaki
Die eigentlichen Daten stammen aus einer CSV-Datei, die vom Dienst auf der obersten Ebene organisiert wird. In jedem Dienst sind die EnumMap-Parameter tatsächlich Zuordnungen von festen Gerätetypen zu den entsprechenden IP-Adressfolgen, also z. Die CSV ist fest und nicht in separate Tabellen aufgeteilt. Auf diese Weise ist der obige (e -> e.getKey()) immer noch derselbe Service-Name-Schlüssel auf hoher Ebene (die Servicenamen sind KEY1 & KEY2 in meinem erfundenen Beispiel) – johnco3
Sicher, aber es wäre viel einfacher, eine Zeile zu haben Ihrer CSV werden durch einen tatsächlichen Typ dargestellt. Erstellen Sie eine Klasse 'Service' mit einem Namen und einer Liste von _things_ (benötigt einen besseren Namen), die den Gerätetyp, die Adresse usw. enthalten. – Tunaki