如何在java中将Map<String,string>添加到Map<String,List<Object>>


public Map<String, List<PatientInfo>> getPatients(String sendingApplication,String sendingFacility) {
        // TODO Auto-generated method stub
        Map<String, List<PatientInfo>> patientMap = null;
        List<PatientInfo> patientList = null;
        patientMap = new HashMap<String, List<PatientInfo>>();
        patientList = new ArrayList<PatientInfo>();
        try {
        PatientInfoDAO patientInfoDAO = new PatientInfoDAOImpl();
        ItemCollection<QueryOutcome> items = patientInfoDAO.getPatients(sendingApplication, sendingFacility);
        for(Item item : items){
            PatientInfo patient = new PatientInfo();
            patient.setAdministrativeSex(item.getString(""));
            patient.setFamilyName(item.getString("FAMILYNAME"));
            patient.setGivenName(item.getString("GIVENNAME"));
            patient.setAdmitDateOrTime(item.getString("GENDER"));
            patient.setAssignedPatientLocationBuilding(item.getString("USERNAME"));
            patient.setAssignedPatientLocationFloor(item.getString("PASSWORD"));
            patient.setAssignedPatientLocationPersonLocationType(item.getString("USERROLE"));
            patient.setAssignedPatientLocationRoom(item.getString("USERSTATUS"));
            patient.setAsssignedPatientLocationBed(item.getString("EMAIL"));
            patient.setAttendingDoctor(item.getString("EMROPERATOR"));
            patient.setClientId(item.getString("clientId"));
            patient.setDateOrTimeOfMessage(item.getString("dateOrTimeOfMessage"));
            patient.setDischargeDateOrTime(item.getString("dischargeDateOrTime"));
            patient.setDob(item.getString("dob"));
            patient.setEventOccuredTime(item.getString("eventOccuredTime"));
            patient.setImageUrl(item.getString("imageUrl"));
            patient.setLastModifiedOn(item.getString("lastModifiedOn"));
            patient.setMessageControlId(item.getString("messageControlId"));
            patient.setNrPatientId(item.getString("nrPatientId"));
            patient.setPatientId(item.getString("patientId"));
            patient.setPatientStatus(item.getString("patientStatus"));
            patient.setPriorPatientLocationBed(item.getString("priorPatientLocationBed"));
            patient.setPriorPatientLocationBuilding(item.getString("priorPatientLocationBuilding"));
            patient.setPriorPatientLocationFloor(item.getString("priorPatientLocationFloor"));
            patient.setPriorPatientLocationPersonLocationType(item.getString("priorPatientLocationPersonLocationType"));
            patient.setPriorPatientLocationPointOfCare(item.getString("priorPatientLocationPointOfCare"));
            patient.setPriorPatientLocationRoom(item.getString("priorPatientLocationRoom"));
            patient.setReceivingFacility(item.getString("receivingFacility"));
            patient.setRecevingApplication(item.getString("recevingApplication"));
            patient.setSendingApplicaation(item.getString("sendingApplicaation"));
            patient.setSendingFacility(item.getString("sendingFacility"));
            patientList.add(patient);
        }
        String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        patientMap.put("PATIENTLIST", patientList);
        patientMap.put("LASTKEY", date);

        return patientMap;
        }catch(AmazonServiceException ase){
            throw new RuntimeException("internalServerError");
        }catch(AmazonClientException ase){
            throw new RuntimeException("internalServerError");
        }
    }       

在这种情况下,我无法将日期字符串添加到映射>中?

您正在尝试将字符串放置在地图期望列表的位置。

而不是:

patientMap.put("PATIENTLIST", patientList);
patientMap.put("LASTKEY", date);

地点:

patientMap.put(date, patientList);

使用地图,日期字符串是关键,患者列表为价值,您可以在给定日期快速获取患者列表。


如果您想使用地图保留字符串表格的日期和对象列表,则必须将这些字符串转换回其原始日期或患者对象列表。

如果这实际上是您想要的,我建议您研究 Java对象序列化和DeSerialization

这是您可以做的小更改(绝对必须更改返回类型):

public Map<String, PatientMapObject> getPatients(String sendingApplication,String sendingFacility) {
    // TODO Auto-generated method stub
    Map<String, PatientMapObject> patientMap = null;
    List<PatientInfo> patientList = null;
    patientMap = new HashMap<String, PatientMapObject>();
    patientList = new ArrayList<PatientInfo>();
    try {
        PatientInfoDAO patientInfoDAO = new PatientInfoDAOImpl();
        ItemCollection<QueryOutcome> items = patientInfoDAO.getPatients(sendingApplication, sendingFacility);
       for(Item item : items){
            PatientInfo patient = new PatientInfo();
            patient.setAdministrativeSex("Male");
            patientList.add(patient);
        }
        String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        PatientMapObject pmo = new PatientMapObject();
        pmo.setPatientList(patientList);
        pmo.setPDate(date);
        patientMap.put("PATIENTLIST", pmo);
        return patientMap;
    }catch(Exception ase){
        throw new RuntimeException("internalServerError");
    }
}
class PatientMapObject{

    private List<PatientInfo> patientList;
    private String pdate;
    public void setPDate(String pdate) {
        this.pdate = pdate; 
    }
    public void setPatientList(List<PatientInfo> patientList) {
        this.patientList = patientList;
    }
    //getters 
}

您只能在Map的定义中添加定义的对象类型(即List<PatientInfo>,因为您正在创建映射Map<String, List<PatientInfo>>)来添加字符串,还应使用Map<String,Object>

如我的评论中所述,您可以使用Map<String, Object>类型的地图来保留患者列表和日期。该解决方案的问题是

  1. 它不是类型的安全;
  2. 它很容易在地图键的名称中遭受错别字;
  3. 如下示例,每当您从地图中检索项目时,您都必须执行演员。
Map<String, Object> patientData = new HashMap<>();
patientData.put("LASTKEY", date);
String lastKey = (String) patientData.get("LASTKEY");

为了避免所有这些,这是我认为是最惯用的Java解决方案:创建一个PatientData类,以保存您的PatientInfo项目列表,以及您要存储的额外日期:

public class PatientData {
    private List<PatientInfo> patientList = new ArrayList<>();
    private Date lastKey; // or better still, use one of the Java 8 date classes
    // getters and setters...
}

这保证了类型的安全性,并消除了关键名称中错别字的风险,又消除了铸造的需求:

PatientData patientData = new PatientData();
patientData.setLastKey(new Date());
Date date = patientData.getLastKey();

最新更新