在我看来,此示例代码需要更正:
Map<Employee, Employee> m = new HashMap<Employee, Employee>(managers);
m.values().removeAll(managers.keySet());
Set<Employee> slackers = m.keySet(); // this line should be changed to
Set<Employee> slackers = m.values();
有人可以确认吗?
答案 0 :(得分:5)
如果您知道该代码应该做什么,您只能知道该代码是否需要更正。以下是上下文:
一旦你完成了这项工作,你可能会有一群员工的经理不再为公司工作(如果任何西蒙的直接报告本身就是经理)。以下代码将告诉您哪些员工的管理人员不再为公司工作。
Map<Employee, Employee> m = new HashMap<Employee, Employee>(managers);
m.values().removeAll(managers.keySet());
Set<Employee> slackers = m.keySet();
因此,我们从一张地图开始,将每位当前员工映射到经理。然后我们删除经理是当前员工的所有条目。这给我们留下了一张地图,其中只包含经理不是员工的员工的条目。最后,我们得到了密钥集......它将这些员工作为一个集合。
这对我来说似乎是正确的 1 。
您建议最后一行应该是:
Set<Employee> slackers = m.values();
这会给你所有离开的经理。但这不是问题所要求的答案。 (此外,m.values()
将返回Collection
而不是Set
。)
TL; DR - 教程中没有错误。
1 - 除了错误地假设没有经理的员工会成为懒鬼: - )。