Es ist eigentlich eine knifflige Frage, denn soweit ich weiß, bietet Guava keine einfache Methode, um Ihr Ziel zu erreichen. Vielleicht sollten Sie nicht mit unveränderlichen Sammlungen arbeiten, wenn Sie sie ändern müssen. Zum Beispiel können Sie Ihre Daten in veränderbaren SortedMultiset speichern und eine defensive Kopie erstellen, wenn Sie sie irgendwo weitergeben müssen
Diese Operationen sind jedoch weiterhin möglich.
Hinzufügen und Kopie
Um Element in unveränderliche Sammlung hinzuzufügen, müssen Sie Builder
ImmutableSortedMultiset<T> original = ...; //your original data which you want to modify
T element = ...; //new element which you want to add
ImmutableSortedMultiset<T> result = ImmutableSortedMultiset.<T>naturalOrder()
.addAll(original) //copying original data
.add(element)
.build();
entfernen verwenden und kopieren
Hier Dinge ein wenig härter zu bekommen weil Sie die ursprüngliche Sammlung filtern und das Element ausschließen müssen, das Sie entfernen möchten
ImmutableSortedMultiset<T> original = ...;
T el = ...; //element which you want to remove
ImmutableSortedMultiset<T> result = ImmutableSortedMultiset.copyOf(//copy...
Collections2.filter(original, //and filter
Predicates.not(Predicates.equalTo(el)));
Sie müssen dies in eine Methode einfügen, um die Verwendung zu vereinfachen.
Allerdings empfehle ich Ihnen, veränderbare Sammlungen anstelle von unveränderlich zu verwenden, wenn Sie sie wirklich ändern müssen.
Sie können es nicht tun, ohne die vorhandene Sammlung zu sortieren. (Obwohl ich denke, die Art ist wahrscheinlich O (n) für den Fall von nur einem anderen Element, das ist so gut, wie Sie sowieso bekommen.) –
Dies ist * nicht * die Use Case unveränderlichen Sammlungen sind entworfen um klar zu sein. Sie suchen nach dauerhaften Sammlungen. –
@LouisWasserman Danke für den Tipp. Ich werde für persistente Sammlungen googeln. – davidrpugh