example - Einfachste Möglichkeit, eine Liste in ein Set in Java zu konvertieren




set to list python (8)

Eine flexiblere Java 8-Lösung mit Optional.ofNullable

Set<Foo> mySet = Optional.ofNullable(myList).map(HashSet::new).orElse(null);

Was ist der einfachste Weg, um eine List in ein Set in Java zu konvertieren?


Es gibt verschiedene Möglichkeiten, ein Set wie folgt zu erhalten:

    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);

Wenn wir Collectors.toSet() , wird ein Satz und gemäß dem Dokument zurückgegeben: There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned Satzes. Wenn wir ein HashSet erhalten HashSet , können wir die andere Alternative verwenden, um eine Menge zu erhalten ( set3 ).


Ich stimme mit sepp2k überein, aber es gibt noch einige andere Details, die wichtig sein könnten:

new HashSet<Foo>(myList);

wird Ihnen einen unsortierten Satz geben, der keine Duplikate enthält. In diesem Fall wird die Duplizierung mithilfe der Methode .equals () für Ihre Objekte identifiziert. Dies geschieht in Kombination mit der Methode .hashCode (). (Für mehr auf Gleichheit schau here )

Eine Alternative, die eine sortierte Menge ergibt, ist:

new TreeSet<Foo>(myList);

Dies funktioniert, wenn Foo Comparable implementiert. Wenn dies nicht der Fall ist, können Sie einen Komparator verwenden:

Set<Foo> lSet = new TreeSet<Foo>(someComparator);
lSet.addAll(myList);

Dies hängt von entweder compareTo () (von der vergleichbaren Schnittstelle) oder compare () (von der Vergleichseinheit) ab, um die Eindeutigkeit sicherzustellen. Wenn Sie sich nur für die Einzigartigkeit interessieren, verwenden Sie das HashSet. Wenn Sie nach dem Sortieren suchen, dann betrachten Sie das TreeSet. (Denken Sie daran: Später optimieren!) Wenn es auf die Zeiteffizienz ankommt, verwenden Sie ein HashSet, wenn die Platzeffizienz von Bedeutung ist, sehen Sie sich TreeSet an. Beachten Sie, dass effizientere Implementierungen von Set und Map über Trove (und andere Orte) verfügbar sind.


Ich würde einen Null-Check durchführen, bevor ich zum Set überführe.

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

Mit Java 8 können Sie Stream verwenden:

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

Sie können List<> in Set<> konvertieren

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);
}

Wenn Sie die Guava Bibliothek verwenden:

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

oder besser:

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

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

oder vollständiges Beispiel

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);
        }
    }
}




collections