787 Stimmen

Der einfachste Weg, eine Liste in eine Menge in Java zu konvertieren

Wie konvertiert man am einfachsten eine List zu einer Set in Java?

18voto

Sandeep Bhardwaj Punkte 1240
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);
        }
    }
}

1 Stimmen

+1 für ein vollständiges Codebeispiel. Ein zusätzlicher Hinweis ist, dass das Hashing nicht garantiert von Lauf zu Lauf gleich ist. Das bedeutet, dass die Liste, die nach 'Setze Werte .....' gedruckt wird, in einem Lauf 'ABC' und in einem anderen Lauf 'CBA' sein könnte. Wie ich in meiner Antwort erwähnt habe, könnten Sie eine Baumstruktur verwenden, um eine stabile Reihenfolge zu erhalten. Eine andere Möglichkeit wäre die Verwendung eines LinkedHashSet, das sich die Reihenfolge merkt, in der die Elemente hinzugefügt wurden.

11voto

Abdul Alim Shakir Punkte 1060

Denken Sie daran, dass bei der Konvertierung von List in Set Duplikate aus der Sammlung entfernt werden, da List Duplikate unterstützt, Set in Java jedoch nicht.

Direkte Umwandlung : Die gängigste und einfachste Art, eine Liste in ein Set umzuwandeln

// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");

// Converting a list to set
Set<String> set = new HashSet<>(list);

Apache Commons Sammlungen : Sie können auch die Commons Collections API verwenden, um eine Liste in ein Set zu konvertieren :-

// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");

// Creating a set with the same number of members in the list 
Set<String> set = new HashSet<>(4);

// Adds all of the elements in the list to the target set
CollectionUtils.addAll(set, list);

Stream verwenden: Eine andere Möglichkeit besteht darin, die gegebene Liste in einen Stream zu konvertieren, dann den Stream in eine Menge :-

// Creating a list of strings 
List<String> list = Arrays.asList("One", "Two", "Three", "Four"); 

// Converting to set using stream 
Set<String> set = list.stream().collect(Collectors.toSet());

8voto

Jacob G. Punkte 27558

Mit Java 10 können Sie jetzt Set#copyOf zur einfachen Umwandlung einer List<E> zu einer unveränderbaren Set<E> :

var set = Set.copyOf(list);

Denken Sie daran, dass dies ein ungeordneter Vorgang ist und null Elemente sind no erlaubt, da es eine NullPointerException .

Wenn Sie möchten, dass er geändert werden kann, übergeben Sie ihm im Konstruktor einfach ein Set Umsetzung.

7voto

Ashish Punkte 13615

Ich würde vor der Konvertierung in Set eine Nullprüfung durchführen.

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

3 Stimmen

Oder Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);

6voto

Für Java 8 ist es sehr einfach:

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

0 Stimmen

Das "echte" Java 8 wäre die Verwendung von new ArrayList<>() ;-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X