我尝试使用Set.remove(null)从我的Hashset中删除null。但它实际上并没有起作用。我在这里可能出错了什么?

时间:2016-12-22 13:00:24

标签: java list null hashset

以下是我的代码。我试图从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;
        }

1 个答案:

答案 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;