usar - split con varios delimitadores java
La forma más concisa de convertir un conjunto<String> en una lista<String> (6)
No estoy realmente seguro de lo que estás haciendo exactamente a través del contexto de tu código, pero ...
¿Por qué hacer la variable listOfTopicAuthors
en absoluto?
List<String> list = Arrays.asList((....).toArray( new String[0] ) );
el "...." representa, sin embargo, tu set entró en juego, ya sea nuevo o provenga de otra ubicación.
Actualmente estoy haciendo esto:
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
¿Puedes vencer esto?
Prueba esto para Set :
Set<String> listOfTopicAuthors = .....
List<String> setList = new ArrayList<String>(listOfTopicAuthors);
Prueba esto para el Map :
Map<String, String> listOfTopicAuthors = .....
// List of values:
List<String> mapValueList = new ArrayList<String>(listOfTopicAuthors.values());
// List of keys:
List<String> mapKeyList = new ArrayList<String>(listOfTopicAuthors.KeySet());
Si está utilizando Guava, importa estáticamente el método newArrayList
de la clase Lists :
List<String> l = newArrayList(setOfAuthors);
Teniendo en cuenta que tenemos Set<String> stringSet
, podemos usar lo siguiente:
Java 10 (lista no modificable)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Listas modificables)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Según el doc para el método toList()
No hay garantías sobre el tipo, la mutabilidad, la serialización o la seguridad de subprocesos de la Lista devuelta; Si se requiere más control sobre la Lista devuelta, use toCollection (Proveedor).
Entonces, si necesitamos una implementación específica, por ejemplo, ArrayList
, podemos obtenerla de esta manera:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Listas no modificables)
Podemos utilizar el método Collections::unmodifiableList
y envolver la lista devuelta en ejemplos anteriores. También podemos escribir nuestro propio 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);
}
}
Y luego usarlo como:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Otra posibilidad es utilizar el método de collectingAndThen
que permite realizar una transformación final antes de devolver el resultado:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Un punto a tener en cuenta es que el método Collections::unmodifiableList
devuelve una vista no modificable de la lista especificada, según doc . Una colección de vista no modificable es una colección que no se puede modificar y también es una vista de una colección de respaldo. Tenga en cuenta que los cambios en la colección de respaldo podrían seguir siendo posibles, y si se producen, son visibles a través de la vista no modificable. Pero el método de Collectors.unmodifiableList
devuelve una lista verdaderamente inmutable en Java 10 .
List<String> l = new ArrayList<String>(listOfTopicAuthors);
List<String> list = new ArrayList<String>(listOfTopicAuthors);