Java 何时返回Iterable<;字符串>;而不是列表、集合、集合?

Java 何时返回Iterable<;字符串>;而不是列表、集合、集合?,java,neo4j,Java,Neo4j,因此,我一直在相当广泛地使用Neo4JAPI,并且我注意到它们几乎总是有返回的函数 Iterable<Class> Iterable 然而,我一直明白,最好是返回集合、列表或集合中的一个,除非有令人信服的理由不这样做。设置为向用户指示它将永远不会有重复的元素,当顺序很重要或包含重复项时列出,或当您没有策略时列出集合 与Iterable相比,我更喜欢这些工具,因为它们具有有用的实用程序,如.contains()、.add()等。我发现,我经常需要编写代码来将Iterable转换为集

因此,我一直在相当广泛地使用Neo4JAPI,并且我注意到它们几乎总是有返回的函数

Iterable<Class>
Iterable
然而,我一直明白,最好是返回集合、列表或集合中的一个,除非有令人信服的理由不这样做。设置为向用户指示它将永远不会有重复的元素,当顺序很重要或包含重复项时列出,或当您没有策略时列出集合

与Iterable相比,我更喜欢这些工具,因为它们具有有用的实用程序,如.contains()、.add()等。我发现,我经常需要编写代码来将Iterable转换为集合


所以我的问题是:我是否错过了一些重要的东西?是否有充分的理由使用Iterable over Collection?你什么时候会这样做?显然,Neo4j的员工似乎是一流的程序员,所以我认为他们有这样做的理由,但我看不出来。

这只是说,他们给了你一些可以重复的东西。他们并没有做出任何关于在幕后实施的承诺

特别是,这背后可能没有真正的集合类。当您迭代这些元素时,它们可能会被评估和/或延迟获取(想象一下,您如何可能返回一个100万个元素的集合)。在这种情况下,您最好小心地将所有元素收集到一个具体化的集合中,因为它将相当大


因为它是一个图形数据库,所以这很有意义。它类似于JDBC
ResultSet
,在JDBC中,您没有得到结果的集合,而是一行一行地得到,如果您真的想保存所有结果,您必须自己显式地创建一个集合。

是的,它主要是关于结果的惰性评估。收藏班都很热心。实际上Iterable只是
Interator
的语法糖,允许在foreach中使用单个迭代器