3

Java 库中是否有接口,它也列举了一些系列,但遵循与Iteratorand稍有不同的逻辑Enumeration?即他们应该返回booleanon next(),说明是否到达下一个元素,并且应该有getCurrent()返回当前元素的方法?

更新

Iterator.next()不等价,IEnumerator.Current因为前者会在每次调用时推进迭代器,而后者不会。

更新 2

我正在用自己的功能设计自己的课程。我的问题是为了找到一个“有能力”的类比。示例 fromC#只是一个示例,我没有将某些内容从C#to翻译Java

4

3 回答 3

3

这听起来像番石榴的PeekingIterator; 你可以IteratorIterators.peekingIterator.

于 2013-03-21T22:57:30.637 回答
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。

于 2013-03-21T22:52:57.000 回答
-1

如果您使用标准的具体 Collection 类,例如HashSetArrayList仅命名两个,您将可以访问迭代器。

调用方法:collection.hasNext()将返回一个 boolean,但不推进指针。这将允许您确定是否应该尝试阅读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)
}
于 2013-03-21T22:06:58.247 回答