2014-12-01 4 views
0

메시지 아래에서 본 메소드가 있습니다. "each for"에서이 메소드를 리 스트림 뷰 과 같이 myCollect.stream()과 같이 리팩토링하고 싶습니다. collect (Collectors.toMap (..))) Collectors.toMap (..) .Java 8 스트림으로 리팩토링

private <T extends Entity> Map<String, Object> prepareEntity(T entity) throws Exception { 
     Map<String, Object> preparedEntity = new LinkedHashMap<>(Collections.EMPTY_MAP); 
     Objects.requireNonNull(entity); 
     Class clazz = entity.getClass(); 

     List<Field> openFields = getDeclaredFields(clazz, Collections.EMPTY_LIST); 

     for (Field field : openFields) { 
      field.setAccessible(true); 
      preparedEntity.put(field.getName(), field.getType().equals(Boolean.class) 
        ? ("true".equals(field.get(entity).toString())) ? 1 : 0 
        : field.get(entity)); 
     } 

     return preparedEntity; 
    } 

답변

0

그것은이 같은해야한다 : " 'getName'을 방법을 확인할 수 없습니다"

return openFields.stream() 
       .collect(Collectors.toMap(Field::getName, 
              field->field.getType().equals(Boolean.class)? 
                ("true".equals(field.get(entity).toString())) ? 1 : 0 
                : field.get(entity) 
              ) 
         ); 
+0

IDEA 쇼 오류 메시지가이 같은 짓을 시도했다, 너무 – BabyGluk

+0

@BabyGluk 그것은'java.lang의인가 .reflect.Field'? 그 클래스는'Field :: getField' 메쏘드를 가지므로 작동해야합니다. 메소드 참조를 람다 식으로 대체하려고 시도 할 수 있습니다 :'field-> field.getName()'. – Eran

+3

만약'java.lang.reflect.Field'이라면'field.getBoolean (entity)? 1 : 0'이 아닌 이상한'("true". equals (field.get (entity) .toString()))? 1 : 0' ... – Holger