我正在写一份MR Job.但我遇到了与Iterable对象相关的问题.我需要找到它的大小.我把它浇铸为List对象,但这是错误的.(名单可强制转换为可迭代,但不能做的逆转.)还有另外一种方法,通过使用该对象的迭代和递增每个值的计数器IE浏览器.但这不是最佳解决方案.任何人都可以提出更好的方法吗?
请帮我.提前致谢.
cas*_*nca 15
所述Collection接口提供了一个size()方法,它延伸Iterable.如果你的迭代器恰好来自一个集合,你可以问它的大小,否则你运气不好,你只需要迭代到最后.
这是一个实现这个的黑客:
public int size(Iterable<?> it) {
if (it instanceof Collection)
return ((Collection<?>)it).size();
// else iterate
int i = 0;
for (Object obj : it) i++;
return i;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
你必须通过迭代器并计算项目.例如,
while (iterator.hasNext()) {
iterator.next();
count++;
}
Run Code Online (Sandbox Code Playgroud)
这不是很干净,但迭代器的目的是迭代,并没有为此提供任何特定的api.
但是,迭代器在哪里创建?如果它来自另一个对象,例如Collection对象,则可以确定源的大小而不是迭代器本身.
| 归档时间: |
|
| 查看次数: |
31246 次 |
| 最近记录: |