sah ich ein Beispiel für StreamEx wich ganz nett ist und das geht soerstellen Karte mit SimpleEntry und StreamEx
Map<String, String> toMap = StreamEx.of(splittedTimeUnit1)
.pairMap((s1, s2) -> s1.matches("-?\\d+(\\.\\d+)?") ? new String[]{s2, s1} : null)
.nonNull()
.toMap(a -> a[0], a -> a[1]);
arbeitet Dieses gut eine meiner Ausgabe ist {seconds=1, minutes=1}
, die in Ordnung ist. Nicht perfekt, weil ich die Nummer später umwandeln muss.
habe ich versucht, mit SimpleEntry<String,Integer>
zu optimieren:
Map<String, String> toMap2 = StreamEx.of(splittedTimeUnit1)
.pairMap((s1, s2) -> s1.matches("-?\\d+(\\.\\d+)?") ? new SimpleEntry<>(s1,s2) : null)
.nonNull()
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
welche haben, aber jetzt das Problem, das ich kompiliert, dass einige Werte mehrmals in die Karte gesetzt werden, die Exception in thread "main" java.lang.IllegalStateException: Duplicate key minutes
zu einem führt Wie kann ich das beheben Dies?
EDIT
dumme Fehler: Ich habe vergessen, s1 und s2 bei dem zweiten Beispiel zu wechseln
Map<String, String> toMap2 = StreamEx.of(splittedTimeUnit1)
.pairMap((s1, s2) -> s1.matches("-?\\d+(\\.\\d+)?") ? new SimpleEntry<>(s2,s1) : null)
.nonNull()
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Sie tun keine Zeichenfolge zu Zahlenumwandlung. Sie haben gerade Schlüssel und Wert ausgetauscht - warum? – Holger
Ja, ich denke, das war das Problem mit dem zweiten. Wenn ich sie umschalte funktioniert alles wie erwartet, danke. Ich möchte die Einheit als Schlüssel und die Zahl als Wert haben, also ist dies beabsichtigt –