【发布时间】:2017-11-13 08:44:11
【问题描述】:
我使用了嵌套地图,
Map<String,Map<String,List<String>>> scheduleMap = new HashMap<>();
我在地图中放置了三个元素,studentId、subject、major。
作为输入示例,
scheduleMap1.add("30600001", "INFO1105", "IT");
scheduleMap1.add("30600001", "ELEC1603", "ElecEng");
scheduleMap1.add("30600002", "INFO1103", "IT");
scheduleMap1.add("30600003", "INFO1003", "IT");
scheduleMap1.add("30600001", "ELEC1601", "ElecEng");
scheduleMap1.add("30600002", "INFO1003", "IT");
scheduleMap1.add("30600002", "ELEC1603", "ElecEng");
scheduleMap1.add("30600001", "INFO1003", "IT");
被放入地图中。
最终的目的是,对于每个学生id,30600001、30600002和30600003,如果key中的任意一个存储了两个相同的专业,就应该增加计数。
例如,如示例所示,30600001 有两个“IT”和两个“ElecEng”,每个作为其主要元素。所以计数应该等于 2。
对于studentId 30600002,它有两个“IT”,但只有一个“ElecEng”作为主要元素,所以计数应该是1。
我可以通过这样的编码来实现我的目标:
for(Entry<String, Map<String, List<String>>> studentId : scheduleMap.entrySet()) {
for(Entry<String, List<String>> subject : studentId.getValue().entrySet())
{
for(String major : subject.getValue())
{
if(major.contains("IT"))
{
it++;
} else if(major.contains("ElecEng")) {
elec++;
}
if(it >= 2 || elec >= 2)
{
count++;
}
}
但是,有没有办法通过不指出像major.contains("IT") 和major.contains("ElecEng") 这样的发现专业来获得计数?
我真的很想通过点赞来增加计数,
if(everytime key.subject.major has two identical elements)
{
count++;
}
任何帮助都会很棒。谢谢!
【问题讨论】:
-
地图没有
add方法,put方法需要一个键 + 值,而不是 3 个值。所以你的例子没有多大意义。 -
这里不应该是
scheduleMap1.put (key, value)而不是scheduleMap1.add(a, b, c);吗? -
哦,为了把三个元素放到一个map中,我分别创建了add方法
-
放置元素效果很好,但我没有得到的是在某个键中找到两个相同元素而不指出主题名称的方法......
-
地图中的一个键将只存储一个值。如果您在 map 中放置另一个值,它将覆盖已存储的值,除非这些值具有相同的哈希码。您添加的值是否具有相同的哈希码。如果不是,则无法使用 map 找到两个相同的值。
标签: java data-structures computer-science