Cht*_*ect 12 java java-8 java-stream
我有一种情况,我正在读取数据库并返回a List<String>,其中每个字符串被选中并根据某些条件添加到列表中.方法签名是:
public List<String> myMethod(String query, int limit)
Run Code Online (Sandbox Code Playgroud)
第二个参数提供返回列表大小的上限(设置limit=-1将删除任何大小限制).为了避免使这个方法占用大量内存,我编写了一个返回Stream<String>而不是列表的等效方法.(注意:我不需要随机访问返回的元素或任何其他特定于列表的功能.)
但是,我对返回a有点怀疑Stream<>,特别是因为该方法是公开的.使用Stream<>Java 返回公共方法是否安全?
Mar*_*nik 13
它不仅安全,而且是Java首席架构师推荐的.
特别是如果您的数据是基于I/O的,并且因此在myMethod调用时尚未在内存中实现,则最好返回Stream而不是List.客户端可能只需要使用它的一部分或将其聚合成一些固定大小的数据.因此,您有机会从O(n)内存需求转到O(1).
请注意,如果并行化对于您的用例也是一个有趣的想法,那么建议您使用自定义分裂器,其分割策略适应I/O数据源的顺序性质.在这种情况下,我可以推荐一个我的博客文章,它提出了这样一个分裂者.
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |