我有点不好意思问这个问题,因为我确信这是一个非常基本的问题,但是经过搜索和思考后,我仍然无法解决这个问题。
代码来自导师在我的课程集合教程中开发的课程。该类表示具有相关犯罪代码的地区的犯罪表。该工作表实现为 SortedMap,其中键的类型为 String(代表地区),值是整数的 ArrayList(代表犯罪代码)。
有一种方法我们在教程期间未能完成,导师发送了一份副本,我无法遵循逻辑。该方法的代码如下
/**
* displays districts affected by given crime code
*
* @param Integer crime code
* @return none
*/
public void displayAffectedDistricts(Integer crimeCode)
{
ArrayList<Integer> searchCode;
for(String eachDistrict: crimeTable.keySet())
{
searchCode = new ArrayList<Integer>();
searchCode.add(crimeCode);
if(!(searchCode.retainAll(crimeTable.get(eachDistrict))))
{
System.out.println("Code "+crimeCode+" found in district "+eachDistrict);
}
}
}
我已经运行了代码,并且可以看到这是可行的,但我无法遵循 if 条件的逻辑。
我的理解是 searchCode.retainAll(crimeTable.get(eachDistrict)) 将评估对列表 searchCode 的引用,并且此时,如果 eachDistrict 的 Map 条目具有 crimeCode,则 searchCode 将包含由 crimeCode 参数给出的单个值在它的一组值中,否则将为空。
据我所知,这不是布尔值,因此不能在没有比较运算符的情况下用作 if 条件。
有人可以解释我缺少什么吗?