我需要计算出Java中Iterable
中元素的数量。我知道我能做到:
Iterable values = ...
it = values.iterator();
while (it.hasNext()) {
it.next();
sum++;
}
我也可以这样做,因为我不再需要Iterable中的对象了:
it = values.iterator();
while (it.hasNext()) {
it.remove();
sum++;
}
一个小规模的基准测试没有显示出太多的性能差异,对这个问题有什么评论或其他想法吗?
发布于 2013-11-01 20:39:32
这可能有点晚了,但可能会对某些人有所帮助。我在我的代码库中遇到了类似的Iterable
问题,解决方案是在不显式调用values.iterator();
的情况下使用for each
。
int size = 0;
for(T value : values) {
size++;
}
发布于 2016-01-13 21:31:26
您可以将迭代器转换为列表,然后对其使用.size()。
Lists.newArrayList(iterable).size();
为清楚起见,上述方法将需要以下导入:
import com.google.common.collect.Lists;
发布于 2012-07-22 17:33:16
严格地说,Iterable没有大小。把数据结构想象成一个循环。
考虑一下下面的Iterable实例,没有大小:
new Iterable(){
@Override public Iterator iterator() {
return new Iterator(){
@Override
public boolean hasNext() {
return isExternalSystemAvailble();
}
@Override
public Object next() {
return fetchDataFromExternalSystem();
}};
}};
https://stackoverflow.com/questions/11598977
复制相似问题