Encodera

Thanks for reading!

Donate to the site — we work hard for you.

How to reverse a list

Short answer

Collections.reverse() reverses the list in place:

void main() {
    var numbers = new ArrayList<>(List.of(1, 2, 3, 4));
    Collections.reverse(numbers);
 
    IO.println(numbers);
}

Output:

[4, 3, 2, 1]

Without changes

Since Java 21, reversed() returns a reversed view of the list without changing it. It also works with unmodifiable lists:

void main() {
    var days = List.of("Mon", "Tue", "Wed");
 
    IO.println(days.reversed());
    IO.println(days);
}

Output:

[Wed, Tue, Mon]
[Mon, Tue, Wed]

Iterating backwards

reversed() is handy right in a loop:

void main() {
    var steps = List.of("start", "middle", "end");
    for (String step : steps.reversed()) {
        IO.println(step);
    }
}

Output:

end
middle
start

Common mistake

Confusing reversing with sorting in descending order. reverse() just flips the order, it does not sort:

void main() {
    var numbers = new ArrayList<>(List.of(3, 1, 2));
 
    Collections.reverse(numbers);
    IO.println(numbers);
 
    numbers.sort(Comparator.reverseOrder());
    IO.println(numbers);
}

Output:

[2, 1, 3]
[3, 2, 1]

Functions used in this recipe

Thanks for reading!

Donate to the site — we work hard for you.