我正在写一个MR工作,在减速器方面,我需要在做任何事之前检查Iterable的大小。有人确实长时间问了同样的问题(How to find the size of an Iterable Object?)但是给出的解决方案没有用。由于Iterable没有size()方法,请告诉我如何做。 我尝试了以下选项。
尝试从iterable获取迭代器对象,但得到了以下类型转换
错误。与ResettableIterator相同的错误。 java.lang.ClassCastException: org.apache.hadoop.mapreduce.ReduceContext$ValueIterator cannot be cast to java.util.ListIterator
如果我迭代到Iterable对象的末尾来获取大小,那么 我怎样才能回到索引的开头。
if(values instanceof Collection){
return ((Collection)values).size();
}
这不会受到影响,因为值的类型不同。
请帮我一些示例代码。这个问题确实耗费了大量时间。 非常感谢。!!
答案 0 :(得分:0)
Iterator iterator = Use values.iterator();
获取迭代器。List
或其他一些数据结构中,然后迭代它。