关于计算不同键的总数

时间:2013-01-09 17:27:41

标签: java

我有一张地图存储脚本编号和患者ID在地图中脚本编号是关键正弦它始终是唯一的,如下所示

Map m = new LinkedHashMap();
m.put ("123", "23"); 
m.put ("323", "23");
m.put ("153", "23");
m.put ("623", "23");
m.put ("125", "23");
m.put ("122", "24");
m.put ("167", "24");
m.put ("173", "24");
m.put ("113", "25");

现在我的疑问是,我需要找出与患者Id 23相关的脚本数量

我们可以看到上面总共有5个不同的脚本,患者ID为23,所以我需要计算总的不同脚本 和脚本编号也与患者Id 23相关联,即123,323,153,623,125

我已将值显示为示例,但在我的情况下,动态值将填充在Map中,因此请提示。

5 个答案:

答案 0 :(得分:2)

听起来你需要另一个方向的地图,将患者身份识别为计数。每次插入新记录时,get该患者的条目,并递增它。

答案 1 :(得分:1)

如果LinkedHashMap是您拥有的唯一数据结构,唯一的方法是迭代它,并将每个患者ID与23进行比较。

如果由于某种原因这不令人满意,您可以构建辅助数据结构。但是,如果不了解您的问题,很难在这方面提出具体建议。

答案 2 :(得分:1)

遍历您的Map或创建Map,其中'Patient Id'是关键,值是'script No'的列表。

    //Field to store the data in:
    Map<PatientId, List<ScriptId>> partientScriptMap = new HashMap<PatientId, 

    // method to add data
    void add(PatientId p, ScriptId s) {
        List<ScriptId> scriptIds = partientScriptMap.get(p);
        if (null == p) {
            scriptIds = new ArrayList<ScriptId>();
        }
        scriptIds.add(s);
        partientScriptMap.put(p, scriptIds);
   }

   // get all ScriptIds related to a PationId 
   List<ScriptId> getScriptIds(PatientId p) {
        return partientScriptMap.get(p);
   }

您的ScriptIds和PatientIds是否都是字符串,请在上面的代码中用String替换它们 而且你会像这样使用它:

    add("123", "23"); 
    add("323", "23");
    add("153", "23");
    add("623", "23");
    add("125", "23");
    add("122", "24");
    add("167", "24");
    add("173", "24");
    add("113", "25");


    System.out.println("scriptIds for 24: "+getScriptIds("24");

答案 3 :(得分:0)

int count = 0;
for (int i = 0; i < m.size(); i ++) {
    if (m.get(i) == 23) count ++;
}

直接循环并检查每个结果23.

答案 4 :(得分:0)

首先,你应该使用泛型,它们更容易使用。

现在您要做的就是浏览每个键,看看相关值是否符合您的要求:

Map<String, String> m = new LinkedHashMap<String, String>();
...

List<String> keys = new ArrayList<String>();
for(String str: m.keySet()) {
    if(m.get(str).equals("23")) {
        keys.add(str);
    }
}