# How to reverse the elements of a stream in Java 

By Atta Ur Rehman Shah (https://attacomsian.com/about). Published Feb 22, 2020, updated Oct 8, 2022. Topics: Java.
Canonical URL: https://attacomsian.com/blog/java-reverse-stream-elements

> Learn how to reverse the elements of a stream object in Java.

Java 8 introduced the [Stream](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html) 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:

```java
// 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:

```bash
Emma
Baray
John
Alex
```
