How to reverse the elements of a stream in Java

Java 8 introduced the Stream API, a sequence of objects supporting sequential and parallel aggregate operations. By design, a Stream doesn't store any data, so it is not a data structure. It also doesn't modify the original data source.

In simple words, Java 8 streams are just wrappers around a data source like collections, arrays, or other I/O channels. The Stream API provides methods that can be chained together to produce the desired results.

In this article, you'll learn how to reverse the elements of a stream in Java 8 and higher.

Note that this tutorial is not about sorting a stream in reverse order but simply reversing the position of the elements in the Stream.

Let us start s with a basic example:

// create a simple Stream of strings
Stream<String> stream = Stream.of("Alex", "John", "Baray", "Emma");

// reverse stream and print elements
stream.collect(Collectors.toCollection(LinkedList::new))
        .descendingIterator().forEachRemaining(System.out::println);

In the above example, we first created a Stream of string and then collect the elements into a LinkedList.

Since the LinkedList is a double-linked data structure in Java, we can iterate it in any direction: forward and backward.

We preferred to loop over the LinkedList object in the reverse direction using the descendingIterator() method. Here is what the output looks like:

Emma
Baray
John
Alex

✌️ Like this article? Follow me on Twitter and LinkedIn. You can also subscribe to RSS Feed.

You might also like...

Digital Ocean

The simplest cloud platform for developers & teams. Start with a $200 free credit.

Buy me a coffee ☕

If you enjoy reading my articles and want to help me out paying bills, please consider buying me a coffee ($5) or two ($10). I will be highly grateful to you ✌️

Enter the number of coffees below:

✨ Learn to build modern web applications using JavaScript and Spring Boot

I started this blog as a place to share everything I have learned in the last decade. I write about modern JavaScript, Node.js, Spring Boot, core Java, RESTful APIs, and all things web development.

The newsletter is sent every week and includes early access to clear, concise, and easy-to-follow tutorials, and other stuff I think you'd enjoy! No spam ever, unsubscribe at any time.