Conversione tra un elenco e un insieme in Java

1. Panoramica

In questo breve articolo, daremo uno sguardo alla conversione tra un List e un Set , a partire da Plain Java, utilizzando Guava e la libreria Apache Commons Collections e infine con Java 10.

Questo articolo fa parte della serie "Java - Back to Basic" qui su Baeldung.

2. Converti elenco in set

2.1. Con Plain Java

Cominciamo con la conversione da un elenco a un set utilizzando Java :

public void givenUsingCoreJava_whenListConvertedToSet_thenCorrect() { List sourceList = Arrays.asList(0, 1, 2, 3, 4, 5); Set targetSet = new HashSet(sourceList); }

Come puoi vedere, il processo di conversione è indipendente dai tipi e semplice, poiché i costruttori di ogni raccolta accettano un'altra raccolta come origine.

2.2. Con Guava

Facciamo la stessa conversione usando Guava:

public void givenUsingGuava_whenListConvertedToSet_thenCorrect() { List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5); Set targetSet = Sets.newHashSet(sourceList); }

2.3. Con le collezioni Apache Commons

Successivamente, usiamo l'API delle collezioni Commons per convertire tra un elenco e un set :

public void givenUsingCommonsCollections_whenListConvertedToSet_thenCorrect() { List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5); Set targetSet = new HashSet(6); CollectionUtils.addAll(targetSet, sourceList); }

2.4. Con Java 10

Un'ulteriore opzione è utilizzare il metodo factory statico Set.copyOf introdotto in Java 10:

public void givenUsingJava10_whenListConvertedToSet_thenCorrect() { List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5); Set targetSet = Set.copyOf(sourceList); }

Nota che un Set creato in questo modo non è modificabile.

3. Converti set in elenco

3.1. Con Plain Java

Eseguiamo ora la conversione inversa, da un set a un elenco , utilizzando Java :

public void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = new ArrayList(sourceSet); }

3.2. Con Guava

E la soluzione Guava:

public void givenUsingGuava_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = Lists.newArrayList(sourceSet); } 

Molto simile all'approccio java, solo con un codice un po 'meno duplicato.

3.3. Con le collezioni Apache Commons

Vediamo ora la soluzione Commons Collections per convertire tra un Set e un List :

public void givenUsingCommonsCollections_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = new ArrayList(6); CollectionUtils.addAll(targetList, sourceSet); }

3.4. Con Java 10

Infine, possiamo usare List.copyOf che è stato introdotto in Java 10:

public void givenUsingJava10_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = List.copyOf(sourceSet); }

Dobbiamo tenere a mente che una lista risultante non è modificabile.

4. Conclusione

L'implementazione di tutti questi esempi e frammenti di codice può essere trovata su GitHub : questo è un progetto basato su Maven, quindi dovrebbe essere facile da importare ed eseguire così com'è.