Streams as a source of data and operations
Lambda expressions, described and demonstrated in the previous chapter, together with functional interfaces add a powerful functional programming capability to Java. They allow passing behavior (functions) as parameters to libraries optimized for the performance of data processing. This way, an application programmer can concentrate on the business aspects of a developed system, leaving the performance aspects to the specialists – the authors of the library. One example of such a library is java.util.stream
, which is going to be the focus of this chapter.
In Chapter 5, Strings, Input/Output, and Files, we talked about I/O streams as a source of data, but beyond that, they are not of much help for further processing of data. Also, they are byte- or character-based, not object-based. You can create a stream of objects only after objects have been programmatically created and serialized first. The I/O streams are just connections to...