在编写返回元素的序列的方法时,客户端有时会希望将返回结果当做Stream 处理,有时希望将它用于迭代,为了尽量兼顾两者,在返回元素序列的方法时应该优先返回Collection,因为Collection接口是Iterable的子类型, 还有一个stream方法, 所以Collection或其一个合适的子类型, 通常是返回序列的公有方法返回值的最好选择.
因此优先考虑返回Collection可以更加方便客户端使用。
但是也有特例:
当返回的序列非常大的时候,尽量不要使用Collection,先根据需求返回Stream 或Iterable。 如果有必要,可以提供Stream 与Iterable互转的适配器。
因为此时使用Collection 作为返回类型有个缺点:Collecion有一个返回int类型的size 方法,它限制返回的序列长度最大为Interger.MAX_VALUE.
很多方法都会返回元素的序列,在java8之前,主要返回的是Collection、Set、List、Iterable以及数组类型。java8 之后可以返回Stream。但是在实际开发中,我没有见过直接把Stream 作为函数返回的数据类型的用法,最多只是为了减少计算,把Stream 抽取为局部变量。
将Collection 作为返回值,主要是因为它是Iterable的子类型, 还有一个stream方法。能为客户端提供便利。读这部分我的感悟是,在设计方法时,要尽量为调用方考虑,对于返回值而言,能尽量精确返回类型就尽量精确,能确定返回值是List就不要返回Collection。
另外再设计方法时,如果返回的序列非常大,要根据需求返回Stream 或Iterable。这点我之前没有注意到,因为在日常开发中,几乎不会遇到这么大的数据量,因为系统中的代码几乎也都是直接返回的Collection。 不过这一点值得留意,免得之后踩坑。