tolist - Maneira mais fácil de converter uma lista em um conjunto em Java




stream list to set (10)

Qual é a maneira mais fácil de converter uma List em um Set em Java?


A melhor maneira de usar o construtor

Set s= new HashSet(list);

No java 8 você também pode usar o stream api ::

Set s= list.stream().collect(Collectors.toSet());

Com o Java 10, agora você pode usar Set#copyOf para converter facilmente uma List<E> em um Set<E> não modificável:

Exemplo:

var set = Set.copyOf(list);

Tenha em mente que esta é uma operação desordenada, e null elementos null não são permitidos, pois lançará um NullPointerException .

Se você deseja que ele seja modificável, simplesmente passe-o para o construtor de uma implementação Set .


Eu faria uma verificação nula antes de converter para o conjunto.

if(myList != null){
Set<Foo> foo = new HashSet<Foo>(myList);
}

Existem várias maneiras de obter um Set como:

    List<Integer> sourceList = new ArrayList();
    sourceList.add(1);
    sourceList.add(2);
    sourceList.add(3);
    sourceList.add(4);

    // Using Core Java
    Set<Integer> set1 = new HashSet<>(sourceList);  //needs null-check if sourceList can be null.

    // Java 8
    Set<Integer> set2 = sourceList.stream().collect(Collectors.toSet());
    Set<Integer> set3 = sourceList.stream().collect(Collectors.toCollection(HashSet::new));

    //Guava
    Set<Integer> set4 = Sets.newHashSet(sourceList);

    // Apache commons
    Set<Integer> set5 = new HashSet<>(4);
    CollectionUtils.addAll(set5, sourceList);

Quando usamos Collectors.toSet() ele retorna um conjunto e, conforme o documento: There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned . Se quisermos obter um HashSet , podemos usar a outra alternativa para obter um conjunto (verifique set3 ).


Para o Java 8 é muito fácil:

List < UserEntity > vList= new ArrayList<>(); 
vList= service(...);
Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet());

Se você usar a biblioteca de Guava :

Set<Foo> set = Sets.newHashSet(list);

ou melhor:

Set<Foo> set = ImmutableSet.copyOf(list);

Usando o java 8 você pode usar o stream:

List<Integer> mylist = Arrays.asList(100, 101, 102);
Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));

Você pode converter List<> para Set<>

Set<T> set=new HashSet<T>();

//Added dependency -> If list is null then it will throw NullPointerExcetion.

Set<T> set;
if(list != null){
    set = new HashSet<T>(list);
}

Set<E> alphaSet  = new HashSet<E>(<your List>);

ou exemplo completo

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ListToSet
{
    public static void main(String[] args)
    {
        List<String> alphaList = new ArrayList<String>();
        alphaList.add("A");
        alphaList.add("B");
        alphaList.add("C");
        alphaList.add("A");
        alphaList.add("B");
        System.out.println("List values .....");
        for (String alpha : alphaList)
        {
            System.out.println(alpha);
        }
        Set<String> alphaSet = new HashSet<String>(alphaList);
        System.out.println("\nSet values .....");
        for (String alpha : alphaSet)
        {
            System.out.println(alpha);
        }
    }
}

Set<Foo> foo = new HashSet<Foo>(myList);




collections