Collectors.toSet()
não preserva a ordem. Eu poderia usar Lists em vez disso, mas quero indicar que a coleção resultante não permite a duplicação de elementos, que é exatamente para que Set
serve a interface.
java
java-8
collectors
gvlasov
fonte
fonte
SortedSet
? Caso contrário, o costume é o caminho a percorrer.Respostas:
Você pode usar
toCollection
e fornecer a instância concreta do conjunto que deseja. Por exemplo, se você deseja manter o pedido de inserção:Por exemplo:
fonte
ImmutableSet
seria ainda melhor no meu caso. Alguma ideia de como posso fazer um colecionador que colecioneImmutableSet
? Suas instâncias são construídas com umImmutableSet.Builder
que não é umCollection
, portanto, não consigo descobrir como você faria umSupplier
forCollectors.toCollection()
nesse caso.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();
Não tenho certeza se é uma abordagem melhor envolvendo o conjunto resultante comCollections.unmodifiableSet
.