猿问

com.google.common.collect.Lists.newArrayList

我有这个代码:


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): 2

Number of components found (after convert): 0

因此,在我将可迭代对象转换为列表后,元素不再存在。此外,我从未进入以下循环。


为什么元素没有被复制到列表中,这就是文档所说的:


创建一个包含给定元素的可变 ArrayList 实例;创建一个空列表然后调用 Iterables.addAll 的一个非常简单的快捷方式。


largeQ
浏览 843回答 2
2回答

慕无忌1623718

事实证明你Iterable是一个一次性的可迭代对象。1迭代一次后,它不会在后续迭代中抛出,而是为空。因此,您Iterables.size对它的调用有效地清空了Iterable,这就是结果ArrayList为空的原因。相反,你应该尽快将你的转储Iterable到一个ArrayList。删除1句,因为事实证明 Guava 遵守Iterables可迭代多次的事实标准。
随时随地看视频慕课网APP

相关分类

Java
我要回答