HOWTO · Java

Lista concatenada em Java

Este artigo apresenta a concatenação de lista em Java.

Nesta página

Uma coleção ordenada de elementos que podem aumentar dinamicamente é conhecida como coleção List. Ele é representado como um elemento node e cada nó contém uma referência para o próximo nó e o elemento. As operações que podemos realizar em uma coleção de lista incluem passagem de elemento, inserção, atualização e exclusão usando os índices.

Java fornece uma interface List que oferece vários métodos para seu funcionamento. As várias implementações da lista incluem ArrayList, LinkedList e SortedList. Existem diferentes propriedades da lista que podem:

  • Torne-se valores duplicados na lista.
  • Armazene elementos nulos.
  • Cresce dinamicamente, ao contrário de arrayes cujo tamanho é definido.

O código a seguir ilustra como você pode criar uma lista de concatenação Java:

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

public class ListConcatenation {
  public static void main(String[] args) {
    List<String> birds_list =
        Stream.of("pigeon", "crow", "squirrel").collect(Collectors.toList()); // Java 8
    List<String> animal_list = List.of("cat", "dog", "rabbit"); // Java 9

    System.out.println("Way 1");
    List<String> stringArrayList = new ArrayList<String>(); // Java7
    stringArrayList.addAll(birds_list);
    stringArrayList.addAll(animal_list);
    System.out.println(stringArrayList);

    System.out.println("Way 2");
    List<String> newList =
        Stream.concat(birds_list.stream(), animal_list.stream()).collect(Collectors.toList());
    System.out.println(newList);

    System.out.println("Way 3");
    List<String> newList2 =
        Stream.of(birds_list, animal_list).flatMap(Collection::stream).collect(Collectors.toList());
    System.out.println(newList2);
  }
}

No bloco de código acima, as duas primeiras linhas inicializam as listas que queremos concatenar.

A primeira forma de inicialização da lista é fornecer elementos no momento da própria declaração. Assim, de acordo com a metodologia Java 8, a interface Stream é usada. Os fluxos atuam como um wrapper para a fonte de dados e fornecem métodos para operar e processar os dados. O método estático of pega e cria o fluxo sequencial de elementos fornecidos como parâmetros e retorna o fluxo de elemento. A cadeia de operações que realizamos está em Java 8. O método collect é uma operação de terminal que coleta o stream fornecido após a redução.

Outra forma de inicializar a lista é usando a versão Java 9. Ele fornece uma maneira conveniente de inicializar uma lista usando o método de fábrica estático List.of que cria listas imutáveis.

Finalmente, um objeto List combinado é inicializado tradicionalmente usando a versão Java 7. O método addAll() é chamado usando a instância newList. O método anexa a coleção especificada à coleção identificada em seu final. Ele retorna true quando o acréscimo da lista é bem-sucedido. O método pode lançar NullPointerException quando a coleção de lista passada é nula.

A instância de lista combinada agora contém a coleção birds_list. Da mesma forma, a instância animal_list é adicionada a stringArrayList. E, finalmente, após imprimir a lista, ele cria uma coleção sequencial anexada uma após a outra.

Abaixo está a saída do console do bloco de código:

Way 1 [pigeon, crow, squirrel, cat, dog, rabbit] Way 2 [pigeon, crow, squirrel, cat, dog, rabbit]
    Way 3 [pigeon, crow, squirrel, cat, dog, rabbit]

Listar concatenação usando o método cacat() em Java 8

A ilustração usa o mesmo bloco de código para mostrar o método concat() - é estático na interface Stream. É considerada uma operação intermediária ou inicialização lenta, pois opera quando uma operação de terminal é aplicada sobre a função. O método concat() usa dois fluxos que devem ser concatenados. E ele retorna a lista combinada dos dois fluxos que passamos como parâmetros. Por meio desse método, a função collect é chamada para converter o fluxo no formato desejado. A função leva o coletor como argumento e, em nosso caso, a função Collectors.toList() é passada para reduzir o fluxo no tipo List.

A saída seria semelhante ao primeiro bloco de código e é impressa no log do console acima sob a instrução Way 2.

Listar concatenação usando o método Stream.of() em Java 8

Como mencionado acima, de é um método estático na interface Stream que recebe elementos. Portanto, esses elementos podem ser tipos de dados primitivos ou classes de collections. As coleções de pássaros e animais passam como argumentos. Agora, o método flatMap é invocado na cadeia de chamadas e o uso é para realizar o processamento e transformar o fluxo passado.

O método flatMap leva uma Function como parâmetro. O método aplica transformações sobre os elementos e nivela o resultado. Nesse caso, Collection::stream é passado para converter os elementos em um único stream, que é retornado após o processamento. O fluxo agora é coletado usando o método collect.

A saída é a mesma do bloco do console acima com o título Way 3.