Inizializzazione elenco Java in una riga

0 Comments

Panoramica

In questo breve tutorial, studieremo come inizializzare un elenco utilizzando one-liner.

Ulteriori letture:

Collezioni.emptyList () vs. New List Instance

Scopri le differenze tra le raccolte.emptyList() e una nuova istanza list.,
Per saperne di più →

Guida al Java ArrayList

Guida rapida e pratica per ArrayList in Java
Per saperne di più →

Creare da un array

Possiamo creare un elenco da un array. E grazie ai letterali dell’array, possiamo inizializzarli in una riga:

Possiamo fidarci del meccanismo varargs per gestire la creazione dell’array. Con questo, possiamo scrivere codice più conciso e leggibile:

L’istanza di risultato di questo codice implementa l’interfaccia List, ma non è un java.util.,ArrayList o un LinkedList. Anziché, si tratta di una lista sostenuta dalla matrice originale, che ha due implicazioni che vedremo nel resto di questa sezione.

Sebbene il nome della classe sia ArrayList, è in java.util.Pacchetto Array.

2.1. Dimensione fissa

L’istanza risultato da array.asList avrà una dimensione fissa:

2.2. Riferimento condiviso

L’array originale e l’elenco condividono gli stessi riferimenti agli oggetti:

Crea da un flusso (Java 8)

Possiamo facilmente convertire un Flusso in qualsiasi tipo di Raccolta.,

Pertanto, con i metodi di fabbrica per i flussi, possiamo creare e inizializzare elenchi in una riga:

Dovremmo notare qui che i collezionisti.ToList () non garantisce l’esatta implementazione della lista restituita.

Non esiste un contratto generale sulla mutabilità, serializzabilità o sicurezza del thread dell’istanza restituita. Quindi, il nostro codice non dovrebbe fare affidamento su nessuna di queste proprietà.

Alcune fonti evidenziano quel Flusso.di(…).collect (…) può avere un ingombro di memoria e prestazioni maggiore rispetto agli array.asList()., Ma in quasi tutti i casi, è una tale micro-ottimizzazione che c’è poca differenza.

Metodi di fabbrica (Java 9)

JDK 9 introduce diversi metodi di fabbrica convenienti per le raccolte:

Un dettaglio importante è che le istanze restituite sono immutabili. Oltre a ciò, i metodi di fabbrica presentano diversi vantaggi in termini di efficienza dello spazio e sicurezza del filo.

Questo argomento è esplorato di più in questo articolo.,

Inizializzazione a doppia parentesi graffa

In diversi punti, possiamo trovare un metodo chiamato inizializzazione a doppia parentesi graffa, che assomiglia a questo:

Il nome “inizializzazione a doppia parentesi graffa” è abbastanza fuorviante. Mentre la sintassi può sembrare compatta ed elegante, nasconde pericolosamente ciò che sta succedendo sotto il cofano.

In realtà non esiste un elemento di sintassi a doppia parentesi in Java; questi sono due blocchi formattati intenzionalmente in questo modo.

Con le parentesi esterne, dichiariamo una classe interna anonima che sarà una sottoclasse di ArrayList., Possiamo dichiarare i dettagli della nostra sottoclasse all’interno di queste parentesi.

Come al solito, possiamo usare i blocchi di inizializzazione delle istanze, ed è da qui che proviene la coppia interna di parentesi graffe.

La brevità di questa sintassi è allettante. Però, è considerato un anti-pattern.

Per saperne di più sull’inizializzazione a doppia parentesi graffa, dai un’occhiata al nostro articolo qui.

Conclusione

Java moderno offre diverse opzioni per creare una raccolta in una riga. Il metodo che scegliamo è quasi interamente dovuto alle preferenze personali piuttosto che al ragionamento tecnico.,

Un importante takeaway è che, anche se sembra aggraziato, l’anti-pattern dell’inizializzazione anonima della classe interna (aka double brace) ha molti effetti collaterali negativi.

Come sempre, il codice è disponibile su GitHub.

Inizia con Spring 5 e Spring Boot 2, attraverso il corso Learn Spring:

>>CONTROLLA IL CORSO


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *