以下是我的代码。我试图从List和Set中删除空引用。我仍然可以看到Null出现在印刷的Hashset中。我哪里错了?
public boolean checkStickySession(Map<String,List<String>> map1){
List<String> sessionList = map1.get("sessionId");
sessionList.removeAll(Collections.singleton(null));
Set<String> sessionSet = new HashSet<String>(sessionList);
boolean status=false;
sessionSet.remove(null);
logger.info("sessionSet::"+sessionSet);
if(sessionSet != null && sessionSet.size()==1){
status = true;
}
return status;
}
答案 0 :(得分:3)
很可能你有字符串"null"
打印相同但不是相同的引用。如果您单步执行调试器中的代码,您将能够看到差异。
List<String> list = new ArrayList<>();
list.add("null");
list.add(null);
System.out.println(list); // prints [null, null]
assert list.size() == 2;
list.remove(null);
assert list.size() == 1;
list.remove(null); // can't remove the "null" this way.
assert list.size() == 1;
System.out.println(list); // prints [null]
list.remove("null");
assert list.size() == 0;