何时返回Iterable <String>而不是List,Set,Collection?

phi*_*686 6 java neo4j

所以我一直在使用Neo4j API进行相当广泛的工作,我注意到它们几乎总是会有返回的功能

Iterable<Class>
Run Code Online (Sandbox Code Playgroud)

虽然我一直都明白,除非有令人信服的理由不这样做,否则最好退回Set,List或Collection中的一个.设置为向用户指示它永远不会有重复的元素,当订单重要时列出或包含重复项,或者当您没有策略时收集.

我更喜欢这些Iterable,因为它们有有用的实用程序,如.contains(),.add()等.我发现我经常需要编写代码来将Iterable转换为Collection.

所以我的问题是:我错过了一些重要的东西吗?是否有合理的理由使用Iterable而不是Collection?你什么时候这样做?显然,Neo4j的人似乎是一流的程序员,所以我认为他们有这个原因,但我看不到它.

Bri*_*new 8

这只是说他们给你一些东西来迭代.他们没有对封底下实施的内容做出任何承诺.

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

由于Neo4J是一个图形数据库,这是有道理的.它类似于JDBC ResultSet,在这种情况下,您不会获得结果集合,而是逐行,如果您真的想要保存所有结果,则必须自己显式创建集合.