空列表中的list.retainAll()返回true

时间:2017-04-01 01:56:45

标签: java list

在一些实验中,我发现如果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<>());

1 个答案:

答案 0 :(得分:4)

您是否真的阅读了retainAll()上的文档?

  

仅保留此列表中包含在指定集合中的元素(可选操作)。换句话说,从该列表中删除未包含在指定集合中的所有元素。

     

<强>返回:
      如果此列表因调用而改变,则为true

因此,您所描述的正是您应该看到的内容:

如果您将空列表传递给list.retainAll(),则所有元素都将从list中删除。因此,list已更改,呼叫将返回true