inicializar a lista em Java numa única linha

neste post, iremos discutir vários métodos para inicializar a lista em Java numa única linha.

Java é muitas vezes criticado por sua verbosidade.,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:

1
2
3
4
5
6
7

List<String> list = new ArrayList<>();
list.,adicionar (“C”);
lista.adicionar (“C++”);
lista.add (“Java”);
list = Collections.unmodifiableList (list);

Neste post, discutiremos vários métodos para inicializar a lista numa única expressão.

Arrays.asList ()

Arrays.asList() devolve uma lista de tamanho fixo apoiada pela lista indicada. Uma vez que um array não pode ser estruturalmente modificado, não é possível adicionar elementos à lista ou remover elementos dela., The list will throw an UnsupportedOperationException if any resize operation is performed on it.

1
List<String> fixedLengthList = Arrays.,asList(“C”, “C++”, “Java”);

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(Arrays.,asList(“C”, “C++”, “Java”));

Java Collections

Coleções de classe consiste de vários métodos estáticos que operam sobre conjuntos e retornar uma nova coleção apoiada por um conjunto especificado.coleções

⮚.addAll ()

Collections.addAll() adiciona todos os elementos especificados à colecção especificada. Os elementos a serem adicionados podem ser especificados individualmente ou como uma matriz., When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:

1
2

List<String> list = Collections.EMPTY_LIST;
Collections.,addAll(lista = new ArrayList<String>(), “C”, “C++”, “Java”);

⮚ Coleções.unmodifiableList ()

alternativamente, pode-se povoar uma coleção usando um construtor de cópia de outra coleção. Um desses métodos é Collections.unmodifiableList() devolve uma vista não modificável da lista especificada. Qualquer tentativa de modificar a lista devolvida resultará em um UnsupportedOperationException.coleções

⮚.,singletonList ()

Se quisermos uma lista que contenha apenas um único elemento, podemos usar Collections.singletonList() que devolve uma lista imutável que contém esse elemento. A lista irá lançar um id

se qualquer operação de modificação for realizada nele.

1
Lista de<String> lista = Coleções.,singletonList(“Java”);

Cinta Dupla Inicialização

Outra alternativa é a utilização de “Cinta Dupla Inicialização”. Isto cria uma classe interna anônima com apenas um inicializador de instância nela. Esta técnica deve ser melhor evitada, pois custa uma classe extra a cada uso e também contém referências ocultas à instância envolvente e a quaisquer objetos capturados. Isso pode causar vazamentos de memória ou problemas com a serialização.,v>2

3
4
5
Lista<String> lista = new ArrayList<String>() {{
adicionar(“C”);
adicionar(“C++”);
adicionar(“Java”);
}};

Java 8

O Java 8 Stream API pode ser usada para a construção de pequenas listas de obtenção de fluxo de estática métodos de fábrica e acumular os elementos de entrada em uma nova lista usando coletores., For example,

⮚ Collectors.toList()

Collectors.toList() returns a Collector that accumulates the input elements into a new List.

1
2

List<String> list = Stream.of(“C”, “C++”, “Java”)
.collect(Collectors.toList());

⮚ Collectors.,toCollection()

The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:

1
2

List<String> list = Stream.,of (“C”,” C++”,” Java”)
.recolha (colectores.toCollection(ArrayList::nova));

⮚ Colecionadores.collectingAndThen ()

poderíamos adaptar um coletor para realizar uma transformação de acabamento adicional., Por exemplo, poderíamos adaptar o toList() coletor de sempre produzir um unmodifiable lista com:

Java 9

Java 9 fez-se conveniente para criar instâncias de lista com um número pequeno de elementos, fornecendo Lists.of() static métodos de fábrica que cria compacto, unmodifiable instâncias do mesmo., For example,

1
List<String> unmodifiableList = List.of(“C”, “C++”, “Java”);

Java 9 provides 12 overloaded versions of this method –

Note there is a var-args version which can handle any number of elements., Agora a questão óbvia é por que Java 9 incluiu tantos métodos extras quando apenas var-args pode ser suficiente? A razão é que há uma vantagem de desempenho sutil em tempo de execução. A versão var-args é provável que corra mais devagar do que os overloadings que não usam varargs. Isto é porque cada invocação de um método varargs irá causar uma alocação de array e inicialização e não esquecer GC overhead.

De acordo com Javadoc, as instâncias da lista criadas por List.of() têm as seguintes características:

  1. elas são estruturalmente imutáveis., Os elementos não podem ser adicionados, removidos ou substituídos. Chamar qualquer método mutador sempre fará com que UnsupportedOperationException seja jogado. No entanto, se os elementos contidos são mutáveis, isso pode fazer com que o conteúdo da lista pareça mudar.
  2. eles rejeitam elementos nulos. Tentativas de criá-los com elementos nulos resultam em NullPointerException.
  3. eles são serializáveis se todos os elementos são serializáveis.
  4. A Ordem dos elementos na lista é a mesma que a ordem dos argumentos fornecidos, ou dos elementos na matriz fornecida.,
  5. eles são baseados em valores. Os chamadores não devem fazer suposições sobre a identidade das instâncias retornadas. As fábricas são livres para criar novas instâncias ou reutilizar as existentes. Portanto, operações sensíveis à identidade nessas instâncias (igualdade de referência ( = = ), código de hash de identidade, e sincronização) não são confiáveis e devem ser evitadas.,

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(List.,de(“C”, “C++”, “Java”));

por Favor, note que ao contrário de métodos estáticos em classes, métodos estáticos em interfaces não são herdadas, de modo que não será possível invocá-los através de uma aplicação de classe, nem através de uma instância do tipo de interface.

goiaba

goiaba também fornece vários métodos de utilidade estáticos pertencentes às instâncias da lista.,

Inicializar Lista usando Goiaba em Java

Apache Commons Collections

Apache Commons Collections ListUtils fornece a classe unmodifiableList() que retorna um unmodifiable lista apoiada pelo determinada lista. Ele lança um NullPointerException se a lista dada é nula e um UnsupportedOperationException se qualquer operação de modificação é realizada nele.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *