如何找到Iterable对象的大小?

Sne*_*ran 7 java iterator

我正在写一份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对象,则可以确定源的大小而不是迭代器本身.