Cómo convertir la corriente <String []> de flujo de <String>?

noobcoder24:

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 flatMapse 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
}
Andrew Tobilko:
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);

Un Stream#flatMapasignador espera una Streama 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));
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184111&siteId=1
Recomendado
Clasificación