2016-12-14 1 views
-1

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)); 
+1

Sie tun keine Zeichenfolge zu Zahlenumwandlung. Sie haben gerade Schlüssel und Wert ausgetauscht - warum? – Holger

+0

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 –

Antwort

0

Die Aussage richtig zu sein scheint, ich glaube, das Problem war, dass ich vergessen zu wechseln s1 und s2. Wenn ich sie umschalte funktioniert alles wie erwartet, danke.

Verwandte Themen