为了账号安全,请及时绑定邮箱和手机立即绑定

com.google.common.collect.Lists.newArrayList

com.google.common.collect.Lists.newArrayList

largeQ 2021-06-18 15:01:28
我有这个代码: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 遵守Iterables可迭代多次的事实标准。


查看完整回答
反对 回复 2021-06-23
  • 2 回答
  • 0 关注
  • 842 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信