What you have here are two stream pipelines. The stream pipelines consist of a source, several intermediate operations, and a terminal operation. But the intermediate operations are lazy. This means that nothing happens unless an upstream operation requires an item. When it does, then the intermediate operation does all it needs to produce the required item, and then again waits until another item is requested, and so on. The terminal operations are usually "eager".