Java库中是否有接口,它们也列举了一些系列,但是除了Iterator
和Enumeration
之外还有一些逻辑?也就是说,他们应该在boolean
上返回next()
,说明是否已达到下一个元素,并且应该使用getCurrent()
方法返回当前元素?
更新
Iterator.next()
不等同于IEnumerator.Current
,因为前者会在每次通话时推进迭代器,而后者则不会。
更新2
我正在使用自己的功能设计自己的类。我的问题是为了找到一个能干的人。比喻。来自C#
的示例只是一个示例,我没有将某些内容从C#
翻译为Java
。
答案 0 :(得分:3)
这听起来像番石榴的PeekingIterator
;您可以使用Iterators.peekingIterator
装饰普通Iterator
。
答案 1 :(得分:1)
您必须在Java中使用不同的方法。 例如,而不是这个C#代码:
Dictionary<int?, int?> m = new Dictionary<int?, int?>();
for (IEnumerator<KeyValuePair<int?, int?>> it = m.GetEnumerator(); it.MoveNext();)
{
Console.Write(it.Current.Key);
Console.Write(it.Current.Value);
}
您需要使用:
java.util.HashMap<Integer, Integer> m = new java.util.HashMap<Integer, Integer>();
for (java.util.Iterator<java.util.Map.Entry<Integer, Integer>> it = m.entrySet().iterator(); it.hasNext();)
{
java.util.Map.Entry<Integer, Integer> current = it.next();
System.out.print(current.getKey());
System.out.print(current.getValue());
}
对于这种特定的转换应该没有很高的要求,因为你通常会在C#中使用'foreach'循环,它会更干净地转换为Java。
答案 2 :(得分:-1)
如果您使用标准的具体Collection类(例如HashSet
和ArrayList
来命名而不是两个),则可以访问迭代器。
调用方法: collection.hasNext()
将返回布尔值,但不会使指针前进。这样您就可以确定是否应该尝试阅读collection.next()
。
示例:
Set<String> numbers = new HashSet<>();
// fill in set...
while (numbers.hasNext()) {
System.out.println(numbers.next());
}
当然,您也可以使用for-each语法迭代集合:
for (String s : numbers) {
System.out.println(s)
}