Существует ли какая-либо прямая функция для захвата требуемых свойств объекта в списке карты из списка объектов без зацикливания? - PullRequest
0 голосов
/ 19 октября 2019
public class EmployeeEntity{

  private int empId;

  private String name;

  private double salary;

  // Getter and Setters
}

ВХОД: Список EmployeeEntity

ВЫХОД: List<Map<String,String>>, где сопоставление выполняется от propertyName к propertyValue. Он должен содержать те свойства, которые я выбрал, а не Все свойства в Entity.

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

Вам не нужно писать код отражения для него, хотя это способ его реализации. Но вы можете использовать Jackson API для преобразования объектов Java в Map или Properties с меньшим количеством строк кода. Пожалуйста, проверьте ниже URL для примера кода. https://www.thetechnojournals.com/2019/10/how-to-convert-java-object-to-map-or.html

1 голос
/ 19 октября 2019

Нет прямой функции для решения ваших проблем. Но, используя streams & reflection, вы можете достичь этого.

class EmployeeEntity {

    private int empId;

    private String name;

    // all arguments constructor

    // getters
}
private Map<String, Object> toMap(final EmployeeEntity employeeEntity,
        final String... fieldNamesToExtract) {

    final Map<String, Object> employeeMap = new HashMap<>();

    final Class<? extends EmployeeEntity> employeeEntityClass = employeeEntity.getClass();

    for (final String fieldName : fieldNamesToExtract) {

        try {

            final Field declaredField = employeeEntityClass.getDeclaredField(fieldName);

            declaredField.setAccessible(true); // because the fields are private

            employeeMap.put(declaredField.getName(), declaredField.get(employeeEntity));
        } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {

            System.out.println("e = " + e);

            throw new RuntimeException(e);
        }
    }

    return employeeMap;
}
final List<EmployeeEntity> employeeEntities = Arrays
            .asList(new EmployeeEntity(1, "A"), 
                    new EmployeeEntity(2, "B"), 
                    new EmployeeEntity(3, "C"));

final List<Map<String, Object>> listOfEmployeeEntityMap = employeeEntities.stream()
            .map(employeeEntity -> toMap(employeeEntity, "empId", "name"))
            .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...