Estoy tratando de aplastar mi corriente String [] a una corriente de cuerdas
por ejemplo,
{ "A", "B", "C" }, {"D, "E" } to "A", "B", "C", "D", "E"
Este es el código que tengo hasta ahora:
Files.lines(Paths.get(file)).map(a -> a.split(" "));
Files.lines(path)
retornos Stream[String]
y yo dividido por cada cuerda "" para obtener una matriz de todas las palabras (lo que ahora Stream<String[]>
.
Me gustaría aplanar cada matriz de palabras en elementos individuales, por lo que Stream[String]
en lugar deStream<String[]>
Cuando se utiliza en lugar de un mapa flatMap consigo un error: Type mismatch: cannot convert from String[] to Stream<? extends Object>
Pensé que flatMap
se utiliza para este propósito? ¿Cuál es la mejor manera de lograr lo que yo estoy tratando de hacer
Pregunta del profesor:
El uso de corrientes: Escribir un método para palabras classify de un archivo de acuerdo a la longitud:
public static Map<Integer,List<String>> wordsByLength(String file)
throws IOException {
// COMPLETE THIS METHOD
}
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
Un Stream#flatMap
asignador espera una Stream
a devolver. Devuelve un String[]
. Para convertir una String[]
en una Stream<String>
, utilice Arrays.stream(a.split(" "))
.
La respuesta completa a su asignación:
public static Map<Integer, List<String>> wordsByLength(String file)
throws IOException {
return Files.lines(Paths.get(file))
.flatMap(a -> Arrays.stream(a.split("\\s+")))
.collect(Collectors.groupingBy(String::length));
}