java - 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 的一个非常薄的快捷方式。
解决方案
您需要了解 事实证明,您Iterable
Guava 返回的anIterables
是一次可迭代的。Iterable
是一次唯一的可迭代对象。1迭代一次后,它不会在后续迭代中抛出,而是为空。
因此,您对它的调用Iterables.size
有效地清空了Iterable
,这就是结果ArrayList
为空的原因。
相反,您应该尽快将您的转储Iterable
到一个ArrayList
。
1Iterable
句被删除,因为事实证明 Guava 遵守s可多次迭代的事实标准。
推荐阅读
- android - 创建函数骨架键盘快捷键
- node.js - 如何在承诺的已获取文档中获取文档
- php - 从循环php内部中断循环
- javafx - 有障碍的广度优先搜索
- regex - 正则表达式匹配 LINE 但不是单个特殊词
- amcharts - AmCharts 如何将滚动条中的滑块向左移动?
- mysql - mysql 5.7.22 的 mysql 中不存在 JSON_EXTRACT
- numpy - 在numpy中组合逻辑(布尔)表达式
- swift - 当应用程序处于后台时,Alamofire 后台上传不打印进度
- vba - 如何以编程方式在 Office Visual Basic 编辑器中导入类模块?