O Java 21 introduziu uma nova funcionalidade no Framework de Coleções: Sequenced Collections. Neste post, vamos explorar os detalhes dessa funcionalidade e fornecer exemplos de uso.
Objetivo das Sequenced Collections
Antes do Java 21, não havia uma maneira unificada de tratar coleções com uma sequência definida de elementos. Coleções como List e Deque tinham uma ordem, mas o seu ancestral Collection não, o que leva a inconsistências e falta de métodos comuns.
SequencedCollections, SequencedSet e SequencedMap
Com o JDK 21, três novas interfaces foram introduzidas, oferecendo uma abordagem padrão para resolver este problema:
SequencedCollectionSequencedSetSequencedMap
Essas interfaces agora garantem que cada coleção tenha um primeiro, segundo e último elemento e suportem operações uniformes para acessar e processar esses elementos.
Exemplo com SequencedCollection
A interface SequencedCollection facilita a adição, recuperação e remoção de elementos nas extremidades da coleção, além de oferecer o método reversed() para visualizar a coleção em ordem inversa.
public static void main(String[] args) {
List<Integer> lista = new ArrayList<>();
lista.add(10);
lista.add(5);
lista.add(30);
System.out.println(lista.getFirst()); // Saída: 10
System.out.println(lista.getLast()); // Saída: 5
System.out.println(lista.reversed()); //Saída [30, 5, 10]
}
Este exemplo mostra a simplicidade de acessar os elementos nas extremidades da lista e a reversão da coleção.
Exemplo com SequencedSet
A interface SequencedSet é específica para implementações de Set, como LinkedHashSet, e personaliza o método reversed() para devolver um SequencedSet.
public static void main(String[] args) {
SequencedSet<Integer> hashSet = new LinkedHashSet<>(List.of(5, 8, 12, 9, 10));
System.out.println("Primeiro elemento: " + hashSet.getFirst()); // Saída: 5
System.out.println("Último elemento: " + hashSet.getLast()); // Saída: 10
System.out.println("Visão reversa: " + hashSet.reversed()); // Saída: [10, 9, 12, 8, 5]
}
Aqui, o LinkedHashSet mantém a ordem de inserção dos elementos e permite manipulá-los de maneira intuitiva com as novas operações sequenciais.
Exemplo com SequencedMap
Um SequencedMap pode ser exemplificado pelo uso de um LinkedHashMap. Vamos ver como isso pode ser aplicado:
public static void main(String[] args) {
SequencedMap<Integer, String> sequencedMap = new LinkedHashMap<>();
sequencedMap.put(1, "Um");
sequencedMap.put(2, "Dois");
sequencedMap.put(3, "Tres");
// Saída: SequencedMap: {1=Um, 2=Dois, 3=Três}
System.out.println("SequencedMap: " + sequencedMap);
// Saída: 1=Um
System.out.println(sequencedMap.firstEntry());
// Saída: 3=Três
System.out.println(sequencedMap.lastEntry());
SequencedMap<Integer, String> reversedMap = sequencedMap.reversed();
// Saída: {3=Tres, 2=Dois, 1=Um}
System.out.println("Visão Reversa: " + reversedMap);
}
Este mapa mantém a ordem de inserção e nos permite acessar os elementos de forma sequencial, incluindo a opção de visualizar o mapa em ordem inversa.
É possível utilizar ainda os métodos, pollFirstEntry() e pollLastEntry().
pollFirstEntry(): Remove e retorna o primeiro item do map, Se o mapa estiver vazio, retornanull.pollLastEntry(): Remove e retorna o último elemento do mapa. Assim comopollFirstEntry(), retornanullse o mapa estiver vazio.
Conclusão
As SequencedCollections no Java 21 simplificam a interação com coleções ordenadas, estabelecendo uma uniformidade antes inexistente. Estes exemplos ilustram como as novas interfaces podem melhorar significativamente a clareza e a eficiência do código Java. Explore mais e aprofunde-se na documentação oficial para maximizar o uso dessas novas funcionalidades.
Neste blog você também encontrar também duas novas features do Java 21: Virtual Threads e Record Patterns e Pattern Matching
Agora que exploramos as novas Coleções Sequenciais do Java 21, queremos saber a sua opinião! 🤔✨ Comente abaixo o que você achou dessas atualizações. Elas serão úteis para seus projetos? Alguma dúvida ou insight que queira compartilhar? Sua participação é muito importante para nós! 💬👍

Pingback: Java 21: Codifique com Emoção Usando o Novo Suporte a Emojis - A Arte de Programar