我有点不好意思问这个,因为我确定这是一个非常基本的问题,但经过搜索和思考,我仍然无法解决这个问题.
代码来自一个班级,导师在我的课程收集教程中进行了开发.该类代表具有相关犯罪代码的地区犯罪表.工作表实现为SortedMap,其中键的类型为String(表示区),值为Integers的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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我运行代码,可以看到这有效,但我无法遵循if条件的逻辑.
我的理解是searchCode.retainAll(crimeTable.get(eachDistrict))将评估对列表searchCode的引用,并且,此时,如果eachDistrict的Map条目具有crimeCode,则searchCode将包含crimeCode参数给出的单个值在它的一组值或否则将为空.
据我所知,这不是布尔值,因此不能用作没有比较运算符的if条件.
有人可以解释一下我缺少的东西吗?