Fechando coleções em Java
1. Introdução
Neste tutorial, ilustraremos como compactar duas coleções em uma coleção lógica.
The “zip” operation is slightly different from the standard “concat” or “merge”. Enquanto as operações “concat” ou “mesclar” simplesmente adicionarão a nova coleção no final da coleção existente, a operação “zip” pegará um elemento de cada coleção e os combinará.
A biblioteca central não suporta “zip” implicitamente, mas certamente existem bibliotecas de terceiros que apresentam esta operação útil.
Considere duas listas, uma com nomes de pessoas e outra com a idade.
List names = new ArrayList<>(Arrays.asList("John", "Jane", "Jack", "Dennis"));
List ages = new ArrayList<>(Arrays.asList(24, 25, 27));
Após o fechamento, terminamos com pares nome-idade construídos a partir de elementos correspondentes dessas duas coleções.
2. Usando Java 8IntStream
Usando o núcleo do Java, poderíamos gerar índices usandoIntStreame usá-los para extrair os elementos correspondentes de duas coleções:
IntStream
.range(0, Math.min(names.size(), ages.size()))
.mapToObj(i -> names.get(i) + ":" + ages.get(i))
// ...
3. Usando fluxos de goiaba
O Google Guava 21 fornece um método auxiliarzip na classeStreams. Isso remove todo o barulho de criar e mapear índices e reduz a sintaxe para entradas e operações:
Streams
.zip(names.stream(), ages.stream(), (name, age) -> name + ":" + age)
// ...
4. Usando jOOλ (jOOL)
jOOL também fornece algumas das adições fascinantes sobre Java 8 Lambda, e com o suporte deTuple1 aTuple16, a operação zip se torna muito mais interessante:
Seq
.of("John","Jane", "Dennis")
.zip(Seq.of(24,25,27));
Isso produzirá um resultado deSeq contendoTuples de elementos compactados:
(tuple(1, "a"), tuple(2, "b"), tuple(3, "c"))
O métodojOOL’s zip oferece flexibilidade para fornecer função de transformação personalizada:
Seq
.of(1, 2, 3)
.zip(Seq.of("a", "b", "c"), (x, y) -> x + ":" + y);
ou se alguém deseja zipar apenas com o índice, ele pode ir com o métodozipWithIndex fornecido porjOOL:
Seq.of("a", "b", "c").zipWithIndex();
5. Conclusão
Neste tutorial rápido, vimos como realizar a operaçãozip.
Como sempre, os exemplos de código no artigo podem ser encontradosover on GitHub.