我有一个HashMap,我将HttpSession对象作为Key并将HashSet作为值
HashMap<HttpSession, HashSet<String>> map = new HashMap<HttpSession, HashSet<String>>();
我有一个HttpSession监听器,我需要检查地图中是否存在天气会话对象
public void sessionDestroyed(HttpSessionEvent se) {
HashMap<HttpSession, HashSet<String>> map = //Get map object
HttpSession session = se.getSession();
if(map.containsKey(session)){
//TODO Code goes here
}
}
IF条件总是返回false,即使会话对象在地图中可用(手动检查地图条目)。我被困了!!!
答案 0 :(得分:2)
如果在先前的请求中将值放入地图中,则您现在拥有的HttpSession
对象不一定与地图中的对象相同(即使它们代表相同的会话)。不需要同一会话的两个表示(AFAIK)为equals
或具有相同的hashCode
,这将破坏地图。
您可以尝试使用session.getId()
值作为密钥。