如何将Map <string,string =“”>添加到Map <string,list <object =“”>&gt;在java中

时间:2017-12-12 06:54:27

标签: java

src

在这种情况下,我无法在Map&gt;中添加日期字符串?

4 个答案:

答案 0 :(得分:4)

您正在尝试放置地图需要List的字符串。

而不是:

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

地点:

patientMap.put(date, patientList);

使用日期字符串为关键且患者列表为值的地图,您可以快速获得给定日期的患者列表。

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

如果这真的是你想要的,我建议你研究 java对象序列化和反序列化

答案 1 :(得分:2)

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

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 
}

答案 2 :(得分:0)

您只能在Map的定义中添加定义的对象类型(即List<PatientInfo>,因为您正在创建类似Map<String, List<PatientInfo>>的地图)以添加字符串,您也应该使用{{1 }}

答案 3 :(得分:0)

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

  1. 它不是类型安全的;
  2. 它容易受到地图键名称中的拼写错误的影响;
  3. 每当您从地图中检索项目时,您都必须执行转换,如下例所示。
  4. 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();