Cómo crear una lista de los mapas de la lista de objetos en Java sin tener método getKey?

praxnet:

Cómo crear una lista de mapas, donde cada nombre de clave se infiere de nombre del atributo de clase, y el valor va a poner por el método getter

Estoy teniendo siguientes clases en java

class DTA {
  private String id;
  private String age;

  @Override
  public String toString() {
    return "DTA{" +
            "id='" + id + '\'' +
            ", age='" + age + '\'' +
            '}';
  }

  public DTA(String id, String age) {
    this.id = id;
    this.age = age;
  }

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getAge() {
    return age;
  }

  public void setAge(String age) {
    this.age = age;
  }
}

Estoy teniendo una lista de objetos de tipo DTA

List<DTA> listA = new ArrayList<>();
listA.add(new DTA("A", "15"));
listA.add(new DTA("B", "25"));

Quiero crear una lista ordenada de mapas (un poco como Scala) que ha siguientes contenidos.

List<? extends Map<String, String>>

List(Map("id"->"A", "age"->"15"), Map("id"->"B", "age"->"25"))
GhostCat saludos Monica C.:

Sin "dinámica", lo sencillo podría ser:

List<Map<String, String>> x = listA
            .stream()
            .map(this::toMap)
            .collect(Collectors.toList());

con un ayudante local, como:

private Map<String, String> toMap(DTA dta) {
    Map<String, String> rv = new HashMap<>();
    rv.put("id", dta.getId());
    rv.put("age", dta.getAge());
    return rv;
}

Para ser totalmente dinámico aquí, se tendría que utilizar la reflexión para consultar los nombres de campo. Puede encontrar ejemplos de cómo hacerlo aquí .

Pero le recomiendo encarecidamente a no hacer eso: la reflexión debe ser siempre el último recurso. La noción de DTA sugiere que usted tiene que los datos de objetos procedentes de algún "servicio" de todos modos. Si es así, ¿por qué primero serializar en una clase específica de DTA, a continuación, "aplanar" esa información en una estructura genérica Mapa ?!

Significado: cuando ese servicio le da objetos que son serializadas como, por ejemplo JSON o XML ... entonces sería mucho mejor que simplemente utilizar una biblioteca como GSON o Jackson a directamente deserializar esos datos en tales "plana" genérica basada en mapas objetos. Jackson, por ejemplo, tiene una JsonNode clase. Al deserializar en tales objetos, se obtiene que el mapeo de nombres de campo de forma gratuita! Vea aquí más código de ejemplo.

El punto es: la identificación de los campos utilizando la reflexión es posible. Pero la reflexión código es siempre tedioso y propenso a errores. Si es posible, se mantenga alejado de hacerlo usted mismo.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227512&siteId=1
Recomendado
Clasificación