在一些实验中,我发现如果list2是一个空列表,list.retainAll(list2)返回true,即使初始列表没有进行任何更改。
为什么会这样?
项目代码:
private static boolean isUpToDate(Map<Long, List<Operation>> writeSet, List<Operation> localWriteSet,
List<NodeStorage> readSetNode,
List<RelationshipStorage> readSetRelationship, long snapshotId)
{
return !writeSet.keySet().stream().filter(id -> id > snapshotId).anyMatch(id -> new ArrayList<>(writeSet.get(id)).retainAll(readSetNode));
}
代码也发生在我身上:
new ArrayList(writeSet.get(id)).retainAll(new ArrayList<>());
答案 0 :(得分:4)
您是否真的阅读了retainAll()
上的文档?
仅保留此列表中包含在指定集合中的元素(可选操作)。换句话说,从该列表中删除未包含在指定集合中的所有元素。
<强>返回:强>
如果此列表因调用而改变,则为true
因此,您所描述的正是您应该看到的内容:
如果您将空列表传递给list.retainAll()
,则所有元素都将从list
中删除。因此,list
已更改,呼叫将返回true
。