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

时间:2014-07-14 14:04:04

标签: java neo4j

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

Iterable<Class>

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

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

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

1 个答案:

答案 0 :(得分:8)

这只是说他们会给你一些东西来迭代。他们没有对所涵盖的内容实施任何承诺。

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

由于Neo4J是一个图形数据库,这是有道理的。它类似于JDBC ResultSet,你不会得到一系列结果,而是逐行,如果你真的想要保留所有结果,你有明确地自己创建一个集合。