Java相当于C#的IEnumerator?

时间:2013-03-21 22:03:42

标签: c# java iterator equivalent ienumerator

Java库中是否有接口,它们也列举了一些系列,但是除了IteratorEnumeration之外还有一些逻辑?也就是说,他们应该在boolean上返回next(),说明是否已达到下一个元素,并且应该使用getCurrent()方法返回当前元素?

更新

Iterator.next()不等同于IEnumerator.Current,因为前者会在每次通话时推进迭代器,而后者则不会。

更新2

我正在使用自己的功能设计自己的类。我的问题是为了找到一个能干的人。比喻。来自C#的示例只是一个示例,我没有将某些内容从C#翻译为Java

3 个答案:

答案 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类(例如HashSetArrayList来命名而不是两个),则可以访问迭代器。

调用方法: 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)
}