Tempo de leitura: menos de 1 minuto
Fala galera, tudo bem?
O Java 9 está no forno e a cada estudo ou consulta que faço a respeito, fico mais empolgado com as novas possibilidades, vocês também são assim?
Esta semana vi o post do Rodrigo Turini da Caelum (Java 9 na prática: melhorias na API de Collections e mapa) falando dessa novidade. Gostei muito do que li, e as novas possibilidades que o Java nos disponibilizará nesta versão.
Collections e Maps são estruturas muito usada em qualquer sistemas, e criar instancias dessas estruturas em Java é muito verboso e chato de fazer. Ultimamente venho usando muito o Groovy para essa tarefa, pois ele e outras linguagens dinâmicas, como Scala e Python) nos disponibiliza as collections literals.
Em Groovy para criar uma lista ou mapa fazemos assim:
[code language=”groovy”]
//Lista de String
List lista = ["Café", "com", "Leite"]
//Mapa
Map mapa = [1:"Café", 2:"com", 3:"Leite"]
[/code]
Muito mais simples, menos verboso e intuitivo do que em Java né:
[code language=”java”]
//Lista de String
List<String> lista = new ArrayList<String>();
lista.add("Café");
lista.add("com");
lista.add("Leite");
//Mapa
Map mapa = new HashMap<Integer, String>();
mapa.put(1, "Café");
mapa.put(2, "com");
mapa.put(3, "Leite");
[/code]
Já no Java 9, teremos a possibilidade de fazer algo parecido com o Groovy sem a necessidade de usarmos Framework e/ou utilitários específicos como Grava e Arrays.asList(), ainda não são as famigeradas collections literals, mas vão nos ajudar bastante na criação de lista unmodified.
Estão a disposição nas interfaces List, Set e Maps, métodos estáticos como:
[code language=”java”]
//List
List.of("Café", "com", "Leite");
//Set
Set.of("Café", "com", "Leite");
//Map
Map.of()
Map.of(k1, v1)
Map.of(k1, v1, …, kn, vn)
Map.of(1, "Café", 2, "com", 3, "Leite") //Exemplo criação de um UnmodifiableMap
//ou…
Map.ofEntries(
entry(k1, v1),
entry(k2, v2),
entry(kn, vn)
);
[/code]
Você pode testar essas e outras alterações no Java 9 usando o REPL, falei um pouquinho dele no post Java 9: O que vem por aí?.
[code language=”bash”]
jshell> List.of("não", "posso", "ser", "editada");
$1 ==> [não, posso, ser, editada]
jshell> $1.add("posso?");
| java.lang.UnsupportedOperationException thrown
| at Collections$UnmodifiableCollection.add (Collections.java:1056)
| at (#2:1)
[/code]
Nota: exemplo a cima retirado do post Java 9 na prática: melhorias na API de Collections e mapa.
Fontes
- Java 9 na prática: melhorias na API de Collections e mapa, Rodrigo Turini – Caelum
- JEP 269: Convenience Factory Methods for Collections, Stuart Marks – OpenJDK

