关于计算不同键的总数
我有一个地图存储脚本编号和患者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。