【问题标题】:How can i return Iterable with a Function?如何使用函数返回 Iterable?
【发布时间】:2019-10-08 09:45:33
【问题描述】:

我有包含人名和年龄的对象。然后我建立了一个包含这些对象的哈希表。我为这个哈希表编写了自己的接口,称为 PeopleIterator 和 PeopleIterable 以及 Iteratorimplementation。这一切都很好。

现在我必须在该哈希表类中编写一个函数,该函数返回另一个名为 StringIterable 的接口,其中包含所有人的姓名。

如果需要,我可以使用 Collections Framework 中的数据结构和辅助类,但我什至不知道如何开始。

public class PeopleHashtable implements PeopleIterable{
    private People[] people;

    public StringIterable copyNames() {

    }
}


public interface StringIterable extends java.lang.Iterable<String> {
    StringIterator iterator();
}

【问题讨论】:

  • 为什么你有所有这些自定义类?你可能不应该...

标签: java return iterable


【解决方案1】:

我认为您误解了要求。我认为copyNames 实际上应该返回Iterator&lt;String&gt; 而不是IterableIterable 是您调用 iterator() 以获得 Iterator 的东西。

我也同意约翰克鲁格曼的评论是正确的。不建议声明像PeopleIterableStringIterable 这样的自定义接口。他们没有帮助。

无论如何,这是copyNames 的简明实现(方法名称选择错误!)假设它返回Iterator 而不是Iterable

public Iterator<String> copyNames() {
    return Arrays.stream(people).map(p -> p.getName()).iterator();
}

如果你真的需要Iterable ....

public Iterable<String> copyNames() {
    return new Iterable<String>() {
        public Iterator<String> iterator() {
            return Arrays.stream(people).map(p -> p.getName()).iterator();
        }
    }
}

【讨论】:

    【解决方案2】:

    set 和 list 是可迭代的。所以也许只是返回类似 map.keySet() 的东西。

    相关:Arrays, lists, sets and maps are iterable. What else?

    【讨论】:

      【解决方案3】:

      通过提供next()hasNext() 的实现来实现Iterator 接口。

      hasNext() 如果您要返回另一个元素,则仅返回 true 或 false。它可以像检查当前数组索引到数组长度一样简单。

      next() 只是返回该索引处的元素并增加索引。

      这是一个示例模板。

      class MyClass implements Iterator<String> {
         String[] foo ...;
         private int index;
         public Iterator<String> iterator() {
            index = 0;
            return this;
         }
      
         public boolean hasNext() {
            //your code
         }
      
         public String next() {
            //your code
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-07
        • 2021-07-21
        • 2020-08-07
        • 2011-07-26
        • 2017-11-08
        • 1970-01-01
        • 2019-03-05
        • 1970-01-01
        • 2014-04-25
        相关资源
        最近更新 更多