Como combinar duas listas em Java: 5 maneiras práticas com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que combinar listas em Java e como não se confundir



Imagine: você tem duas listas de tarefas — "urgentes" e "importantes". Ou duas listas de clientes — do banco de dados do mês passado e do mês atual. Para trabalhar com elas como um todo, é necessário combiná-las. Em Java, essa tarefa é tão comum que a pergunta "How do I join two lists in Java?" no Stack Overflow acumula milhares de visualizações. E não é por acaso: para iniciantes, combinar listas muitas vezes causa confusão — seja um erro de compilação, uma lista que se torna imutável ou perda de dados.



Neste artigo, vamos explorar 5 maneiras comprovadas de combinar duas listas em Java — desde o clássico addAll até o elegante Stream API. Você aprenderá qual método escolher para diferentes situações, como evitar armadilhas e escrever código que funcione de forma rápida e previsível. Vamos lá!



Método 1: O clássico addAll — simples e confiável



O caminho mais direto é usar o método addAll() da interface Collection. Ele adiciona todos os elementos de uma coleção a outra. Parece ideal, mas há um detalhe: ele modifica a lista original. Se você precisar manter as listas originais intactas, crie uma nova.



Exemplo: combinação preservando os originais



import java.util.ArrayList;import java.util.List;

public class JoinListsExample { public static void main(String[] args) { List<String> listA = new ArrayList<>(List.of("Java", "Python", "C++")); List<String> listB = new ArrayList<>(List.of("JavaScript", "Go", "Rust"));

// Criamos uma nova lista e adicionamos ambas as listas List<String> mergedList = new ArrayList<>(listA); mergedList.addAll(listB);

System.out.println(mergedList); // [Java, Python, C++, JavaScript, Go, Rust] // As listas originais não foram alteradas }}


Vantagens: intuitivo, funciona com qualquer tipo de List, não requer Java 8+.

Desvantagens: modifica a lista original se não criar uma nova; não suporta avaliação preguiçosa.



Método 2: Stream API — moderno e flexível



Se você usa Java 8 ou superior, o Stream API oferece uma maneira elegante de combinar listas. Ele não modifica os dados originais e se combina facilmente com outras operações — filtragem, ordenação, transformação.



Combinação básica com Stream.concat



import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;

public class StreamJoinExample { public static void main(String[] args) { List<String> listA = List.of("Vermelho", "Verde", "Azul"); List<String> listB = List.of("Amarelo", "Roxo");

List<String> mergedList = Stream.concat(listA.stream(), listB.stream()) .collect(Collectors.toList());

System.out.println(mergedList); // [Vermelho, Verde, Azul, Amarelo, Roxo] }}


Combinação com filtragem e ordenação



Suponha que você precise combinar duas listas de números, manter apenas os pares e ordená-los em ordem decrescente:



import java.util.List;import java.util.Comparator;import java.util.stream.Collectors;import java.util.stream.Stream;

public class StreamAdvancedJoin { public static void main(String[] args) { List<Integer> listA = List.of(5, 2, 8, 1); List<Integer> listB = List.of(7, 4, 9, 3);

List<Integer> result = Stream.concat(listA.stream(), listB.stream()) .filter(n -> n % 2 == 0) // apenas pares .sorted(Comparator.reverseOrder()) .collect(C

Blogs

Book Recommendations