我有这个代码:int size = Iterables.size(components);log.info("Number of components found (before convert): " + size);List<Component> listOfComponents = Lists.newArrayList(components);size = listOfComponents.size();log.info("Number of components found (after convert): " + size);for (Component component : listOfComponents) { log.info("component : " + component);}在哪里Component:org.sonatype.nexus.repository.storage.Component当我运行它时,它会打印:Number of components found (before convert): 2Number of components found (after convert): 0因此,在我将可迭代对象转换为列表后,元素不再存在。此外,我从未进入以下循环。为什么元素没有被复制到列表中,这就是文档所说的:创建一个包含给定元素的可变 ArrayList 实例;创建一个空列表然后调用 Iterables.addAll 的一个非常简单的快捷方式。
2 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
事实证明你Iterable
是一个一次性的可迭代对象。1迭代一次后,它不会在后续迭代中抛出,而是为空。
因此,您Iterables.size
对它的调用有效地清空了Iterable
,这就是结果ArrayList
为空的原因。
相反,你应该尽快将你的转储Iterable
到一个ArrayList
。
删除1句,因为事实证明 Guava 遵守Iterable
s可迭代多次的事实标准。
添加回答
举报
0/150
提交
取消