【问题标题】:Java equivalent to IEnumerator from C#?Java 相当于 C# 中的 IEnumerator?
【发布时间】:2013-03-21 22:03:42
【问题描述】:

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

更新

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

更新 2

我正在使用自己的功能设计自己的课程。我的问题是为了找到一个“有能力的”类比。 C# 的样本只是一个样本,我不会将 C# 的内容翻译成 Java

【问题讨论】:

  • 您可以将Iterator 子类化并将hasNext() 重命名为next() 并将next() 重命名为getCurrent()
  • @a_horse_with_no_name: 我猜 getCurrent() 可以多次返回同一个对象,而不像 next() 那样继续前进。
  • @a_horse_with_no_name,你知道IEnumerator来自C#的接口契约吗?
  • @Suzan。为什么要在Java 中写C#
  • 这听起来有点像 Guava 的 PeekingIterator

标签: c# java iterator equivalent ienumerator


【解决方案1】:

这听起来像番石榴的PeekingIterator;你可以用Iterators.peekingIterator装饰一个普通的Iterator

【讨论】:

    【解决方案2】:

    您必须在 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。

    【讨论】:

      【解决方案3】:

      如果您使用标准的具体 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)
      }
      

      【讨论】:

        猜你喜欢
        • 2014-09-29
        • 2011-01-21
        • 2011-06-29
        • 2010-09-24
        • 2023-04-06
        • 2014-12-11
        • 1970-01-01
        • 1970-01-01
        • 2012-06-02
        相关资源
        最近更新 更多