In this course, you'll learn about how the Stream APIs provide ways to work with collections as streams of objects. You'll examine how operations such as filter, map, and foreach can be applied to collections by treating them as streams of data elements. Next, you'll learn how to use both anonymous inner class objects and lambda functions with streams, how to define predicates, and how to chain multiple stream operators together into a single pipeline that ends with a terminal operator returning a result. Next, you'll discover the differences between terminal and non-terminal operations, as well as between two different types of terminal operations - reduce and collect operations. Finally, you'll see how collect operations can be used to perform extremely complex operations on collections with minimal code.