关于计算不同键的总数

我有一个地图存储脚本编号和患者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中,因此请提供建议。

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

现在,您只需要检查每个键,看看相关值是否符合您的要求:

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

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

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

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

迭代你的Map或创建一个Map ,其中’Patient Id’是关键,值是’script No’的列表。

  //Field to store the data in: Map> partientScriptMap = new HashMap scriptIds = partientScriptMap.get(p); if (null == p) { scriptIds = new ArrayList(); } scriptIds.add(s); partientScriptMap.put(p, scriptIds); } // get all ScriptIds related to a PationId List 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"); 
 int count = 0; for (int i = 0; i < m.size(); i ++) { if (m.get(i) == 23) count ++; } 

只需循环并检查每个结果对23。