How can I process elements in reverse order across different collection types?

How can I process elements in reverse order across different collection types?
java
Ethan Jackson

Sequenced Collections feature, introduced in JEP 431, provides a uniform way to handle collections with a defined encounter order. How can I leverage this feature to process elements in reverse order, regardless of the specific collection implementation (e.g., List, Set, Map)?

Answer

The Sequenced Collections feature introduced with Java 21 added new interfaces to the Collections Framework:

These interfaces unify the handling of collections that have a defined encounter order, allowing for consistent operations like accessing the first and last elements or processing elements in reverse order. This feature enhances the consistency and expressiveness of the Java Collections Framework, making it easier to perform common operations across different collection types. Existing collection implementations like LinkedList, LinkedHashSet, and LinkedHashMap have been retrofitted to implement these new interfaces.

Here is an example of how we can process elements in reverse order across different collection types:

import java.util.*; class Main { public static void main(String[] args) { // An example for SequencedCollection (e.g. LinkedList) SequencedCollection<String> sequencedList = new LinkedList<>(); sequencedList.add("Mango"); sequencedList.add("Orange"); sequencedList.add("Apple"); System.out.println("Reversed SequencedCollection:"); for (String item : sequencedList.reversed()) { System.out.println(item); } // An example for SequencedSet (e.g. LinkedHashSet) SequencedSet<String> sequencedSet = new LinkedHashSet<>(); sequencedSet.add("Mango"); sequencedSet.add("Orange"); sequencedSet.add("Apple"); System.out.println("Reversed SequencedSet:"); for (String item : sequencedSet.reversed()) { System.out.println(item); } // An example for SequencedMap (e.g. LinkedHashMap) SequencedMap<Integer, String> sequencedMap = new LinkedHashMap<>(); sequencedMap.put(1, "Mango"); sequencedMap.put(2, "Orange"); sequencedMap.put(3, "Apple"); System.out.println("Reversed SequencedMap:"); for (Map.Entry<Integer, String> entry : sequencedMap.reversed().entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }

Output:

Reversed SequencedCollection: Apple Orange Mango Reversed SequencedSet: Apple Orange Mango Reversed SequencedMap: 3: Apple 2: Orange 1: Mango

Related Articles