流的目的不仅是在集合类之间做转换,而且同时提供了一组处理数据的通用操作。有些集合本身是无序的,但这些操作有时会产生顺序。例如生成出现顺序:
?...你可能还希望在值不存在时不计算,为 Map 接口新增的 compute 和 computeIfAbsent 就能处理这些情况。
2.在 Map 上迭代。例如使用内部迭代遍历 Map 里的值:
?...2.源数据结构
每个管道的操作都基于一些初始数据源,通常是集合。将不同的数据源分割相对容易, 这里的开销影响了在管道中并行处理数据时到底能带来多少性能上的提升。...在讨论流中单独操作每一块的种类时,可以分成两种不同的操作:无状态的和有状态的。 无状态操作整个过程中不必维护状态,有状态操作则有维护状态所需的开销和限制。...使用流时,调试可能会变得更加复杂,
因为迭代已交由类库控制,而且很多流操作是惰性求值的。
日志和打印消息
假设你要在集合上进行大量操作,你要调试代码,你希望看到每一步操作的结果是什么。