Collectors.toSet()
ne préserve pas l'ordre. Je pourrais utiliser des listes à la place, mais je veux indiquer que la collection résultante ne permet pas la duplication d'éléments, ce qui est exactement à quoi Set
sert l'interface.
java
java-8
collectors
gvlasov
la source
la source
SortedSet
travailler? Sinon, la coutume est la voie à suivre.Réponses:
Vous pouvez utiliser
toCollection
et fournir l'instance concrète de l'ensemble souhaité. Par exemple, si vous souhaitez conserver l'ordre d'insertion:Par exemple:
la source
ImmutableSet
serait encore meilleur dans mon cas. Des idées sur la façon dont je peux faire un collectionneur qui collectionneImmutableSet
? Ses instances sont construites avec unImmutableSet.Builder
qui n'est pas unCollection
, donc je ne peux pas comprendre comment vous feriez unSupplier
pourCollectors.toCollection()
dans ce cas.Set<String> linkedSet = list.stream().collect(Collectors.toCollection(LinkedHashSet::new));
linkedSet = Collections.unmodifiableSet(linkedSet);
Set<String> set = list.stream().collect( ImmutableSet.Builder<String>::new, ImmutableSet.Builder<String>::add, (builder1, builder2) -> builder1.addAll(builder2.build())).build();
ne sais pas si c'est une meilleure approche en enveloppant l'ensemble résultant avecCollections.unmodifiableSet
.