2017-05-02 2 views
1

자바 8 스트림 콜렉션과 lamba 표현식부터 시작하겠습니다.지도에서 자바 8 API를 사용하여 설정

엔트리 세트를 Map으로 변환하고 싶습니다. 자바 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 값으로 설정했기 때문입니다. 당신은

OlivierGrégoire 추가 @
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

비트가 결과 ImmutableMap''로 변환, collectBigDecimal로 변환 예컨대을 : 필요 –