繁体   English   中英

从 HashMap 获取值并填充 Java 对象

[英]Get Values from HashMap and Populate a Java Object

我已经从数据库数据填充了地图。 我需要从那里获取值到对象。 POJO 中的字段名和 Map 对象中的键名不同。 我做了如下。 有什么有效的方法可以做到这一点

 Map<String ,Object> map; //retrieved from database

Employee e = new Employee();
if(map!=null) {
    if(map.containsKey("name")) {
        e.setFirstName(map.get("name"));
    }
    if(map.containsKey("ads")) {
        e.setMyAddress(map.get("ads"));
    }
    if(map.containsKey("country")) {
        e.setDealCountry(map.get("country"));
    }
    if(map.containsKey("keyId")) {
        e.Id(map.get("keyId"));
    }
}



public class Employee {
    String firstName;
    String id;
    String myAdreess;
    String dealCountry;
//setter getters
}

您可以查看 Hibernate 或其他 ORM。 他们会自动为您进行映射。

例如,这里有一个指向 Hibernate ORM 的链接: https : //hibernate.org/

这比手动进行映射更容易、更快。 ;)

您可以使用 java8+ 的 BiConsumer 为地图的每个键定义一个 setter:

    Map<String, BiConsumer<Employee, String>> consumerMap = new HashMap<>();
    consumerMap.put("name", Employee::setFirstName);
    consumerMap.put("ads", Employee::setMyAddress);
    consumerMap.put("country", Employee::setDealCountry);
    //and so on

    Map<String, String> map = new HashMap<>();//the data from your database 
    Employee e = new Employee();
    if (map != null) {
        consumerMap.forEach((key, value) -> {
            if (map.containsKey(key)) {
                //value is the BiConsumer
                value.accept(e, map.get(key));
            }
        });
    }

forEach 迭代所有定义的映射,然后检查您的数据库中的Map是否具有相应的键并应用数据。

这不涉及任何(手动)反射,并且从映射键到 setter 的映射非常直接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM