2017-05-02 5 views
1

私はjava 8ストリームコレクションとlamba式から始まります:java 8 APIを使用してマップに設定

エントリのセットをマップに変換したいと思います。 Javaの7では

私はこのようにそれを行うだろう:

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()); 

をこれまでのところ、私はこの試みた:

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

をしかし、私は非の静的メソッドを参照することはできませんので、コンパイラが文句を言っています静的文脈。

どのようにJava 8で同じことを達成できますか?

答えて

4

Entry::getValueJsonElementで、BigDecimalではないMap'sという値に設定しているからです。あなたは、例えば、collectBigDecimalに変換する必要があります。:

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がImmutableMap' 'に結果を変換するビットを追加しました@ –

関連する問題