2017-05-02 4 views
1

Ich bin mit Java 8 Stream Sammlungen und Lamba Ausdrücke beginnen:Vom Set Karte java 8 API

Ich möchte eine Reihe von Einträgen auf eine Karte konvertieren.

in Java 7 Ich würde es tun, wie folgt:

JsonObject jsonObject=e.get(EQUATION_MAPPING_KEY).getAsJsonObject(); 
     Set<Entry<String, JsonElement>> entries=jsonObject.entrySet(); 
     ImmutableMap.Builder<Object, Object> builder=ImmutableMap.builder(); 
     for(Entry<String, JsonElement> entry:entries){ 
      builder.put(entry.getKey().toString(),entry.getValue().getAsBigDecimal()); 
     } 
     put(EQUATION_MAPPING_KEY,builder.build()); 

Bisher habe ich das versucht:

ImmutableMap<String,BigDecimal> map=entries.stream().collect(Collectors.toMap(Entry::getKey,Entry::getValue)); 

Aber Compiler beschwert, weil ich nicht eine statische Methode aus einem nicht verweisen können -Static Kontext.

Wie kann das gleiche in Java 8 erreichen?

Antwort

4

Das ist, weil Sie Entry::getValue als Map's Wert setzen, der JsonElement ist und kein BigDecimal. Sie müssen es in BigDecimal in collect umwandeln, z.B .:

Set<Entry<String, JsonElement>> entries = jsonObject.entrySet(); 
ImmutableMap<String, BigDecimal> map = entries.stream() 
    .collect(Collectors.collectingAndThen(Collectors.toMap(e -> e.getKey(), e -> e.getValue().getAsBigDecimal()), ImmutableMap::copyOf)); 
+1

@ OlivierGrégoire Added das Bit das Ergebnis konvertieren, um 'ImmutableMap' –