Was nutzt singletonList?

8

Ich habe nach einer eleganten Lösung gesucht, um Nullwerte aus einer Liste zu entfernen. Ich stieß auf den folgenden Post , der besagt, dass ich list.removeAll(Collections.singletonList(null));

verwenden kann

Dies löst jedoch eine UnsupportedOperationException aus, von der ich annehme, dass removeAll() versucht, eine mutative Operation für die Immutable-Singleton-Sammlung durchzuführen. Ist das korrekt?

Wenn dies der Fall ist, was wäre eine typische Verwendung dieser singleList? Um eine Sammlung der Größe 1 zu repräsentieren, wenn Sie sicher sind, dass Sie nichts mit der Sammlung machen wollen?

Vielen Dank im Voraus.

    
mmoore 26.06.2012, 10:46
quelle

2 Antworten

14

Es funktioniert wie ein Zauber:

%Vor%

Tatsächlich ist Collections.singletonList(null) unveränderlich (was leider in Java [1] versteckt ist), aber die Ausnahme wird von Ihrer list Variable ausgelöst. Offenbar ist es auch unveränderlich, wie im folgenden Beispiel:

%Vor%

Dieser Code wird ein UnsupportedOperationException werfen. Wie Sie sehen können, ist singletonList() in diesem Fall nützlich. Verwenden Sie sie, wenn der Clientcode eine schreibgeschützte Liste erwartet (sie wird nicht geändert), aber Sie möchten nur ein Element darin übergeben. singletonList() ist (Thread-) sicher (wegen Unveränderlichkeit), schnell und kompakt.

[1] z. in gibt es eine separate Hierarchie für veränderbare und unveränderbare Sammlungen, die die API auswählen kann ob es dieses oder das andere akzeptiert (oder beide, da sie gemeinsame Basisschnittstellen haben)

    
Tomasz Nurkiewicz 26.06.2012, 10:48
quelle
0

Wurde Ihre Liste durch Collections.unmodiableList (list) geschützt? Denn wenn Sie es geschützt haben und versuchen, es später zu ändern, erhalten Sie diesen Fehler.

    
mihaisimi 26.06.2012 10:51
quelle

Tags und Links