我正在处理一个需要处理大量(数 GB)逗号分隔值 (CSV) 文件的项目。
我基本上做的事情如下:
- 创建一个知道如何读取所有相关文件的对象
- 向该对象注册一组对数据感兴趣的 Listeners
- 读取每个文件的每一行,将从数据行创建的对象分派给每个侦听器
- 每个 Listener 决定这条数据是否有用/相关
我想知道在源端进行过滤是否会更好,例如,每个侦听器都有一个关联的 Predicate 对象,该对象确定是否应将给定的数据分派给侦听器,在这种情况下,流程看起来更像
- 创建一个知道如何读取所有相关文件的对象
- 向该对象注册一组对
- 读取每个文件的每一行,如果其关联的 Predicate 为数据返回 true,则将从该数据行创建的对象分派给每个侦听器
净效果是一样的,只是过滤发生在哪里的问题。
(同样,我拥有一次处理一个条目的这种“数据流”的唯一原因是因为我正在处理千兆字节的 CSV 文件,并且我无法创建集合、过滤它,然后再处理它 - 我需要随时过滤)