Considerando que temos Set<String> stringSet
, podemos usar o seguinte:
Java 10 (lista não modificável)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (listas modificáveis)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
De acordo com o documento para o métodotoList()
Não há garantias sobre o tipo, mutabilidade, serialização ou segurança de thread da Lista retornada; se for necessário mais controle sobre a lista retornada, use toCollection (Supplier).
Portanto, se precisarmos de uma implementação específica, por exemplo ArrayList
, podemos obtê-lo desta maneira:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (listas não modificáveis)
Podemos fazer uso do Collections::unmodifiableList
método e agrupar a lista retornada nos exemplos anteriores. Também podemos escrever nosso próprio método personalizado como:
class ImmutableCollector {
public static <T> Collector<T, List<T>, List<T>> toImmutableList(Supplier<List<T>> supplier) {
return Collector.of( supplier, List::add, (left, right) -> {
left.addAll(right);
return left;
}, Collections::unmodifiableList);
}
}
E depois use-o como:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Outra possibilidade é fazer uso de um collectingAndThen
método que permita alguma transformação final antes de retornar o resultado:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Um ponto a ser observado é que o método Collections::unmodifiableList
retorna uma visão inalterável da lista especificada, conforme o documento . Uma coleção de visualizações não modificáveis é uma coleção que não pode ser modificada e também é uma visualização em uma coleção de suporte. Observe que as alterações na coleção de backup ainda podem ser possíveis e, se ocorrerem, serão visíveis na visualização inalterável. Mas o método coletor Collectors.unmodifiableList
retorna uma lista verdadeiramente imutável no Java 10 .
java.util.Collection
: O (0)