Java 如何转换流<;字符串[]>;流<;字符串>;?

Java 如何转换流<;字符串[]>;流<;字符串>;?,java,lambda,java-8,java-stream,flatmap,Java,Lambda,Java 8,Java Stream,Flatmap,我正在尝试将字符串[]流展平为字符串流 例如 这是我目前掌握的代码: Files.lines(Paths.get(file)).map(a -> a.split(" ")); Files.lines(path)返回Stream[String],我将每个字符串按“”拆分,以获得所有单词的数组(现在是Stream) 我想将每个单词数组展平为单独的元素,因此Stream[String]而不是Stream 当我使用flatMap而不是map时,我得到一个错误:类型不匹配:无法从字符串[]转换为流

我正在尝试将字符串[]流展平为字符串流

例如

这是我目前掌握的代码:

Files.lines(Paths.get(file)).map(a -> a.split(" "));
Files.lines(path)
返回
Stream[String]
,我将每个字符串按“”拆分,以获得所有单词的数组(现在是
Stream

我想将每个单词数组展平为单独的元素,因此
Stream[String]
而不是
Stream


当我使用flatMap而不是map时,我得到一个错误:
类型不匹配:无法从字符串[]转换为流传递给
flatMap
的函数必须返回流,而不是数组

e、 g


您需要执行
.flatMap()
操作:

  • 正常
    .map()
    操作后

    Files.lines(Paths.get(file)).map(a -> a.split(" ")).flatMap(Arrays::stream);
    
  • 结合正常
    map
    操作:

    Files.lines(Paths.get(file)).flatMap(a -> Arrays.stream(a.split(" ")));
    

最后你需要

public static Map<Integer, List<String>> wordsByLength(String file) throws IOException {
    return Files.lines(Paths.get(file))                      //Stream<String>
            .map(a -> a.split(" "))                          //Stream<String[]>
            .flatMap(Arrays::stream)                         //Stream<String>
            .collect(Collectors.groupingBy(String::length)); //Map<Integer, List<String>>
}
公共静态映射字长度(字符串文件)引发IOException{
返回Files.line(path.get(file))//流
.map(a->a.split(“”)//流
.flatMap(数组::流)//流
.collect(Collectors.groupingBy(String::length));//映射
}
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
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));
}
Files.lines(Paths.get(file)).map(a -> a.split(" ")).flatMap(Arrays::stream);
Files.lines(Paths.get(file)).flatMap(a -> Arrays.stream(a.split(" ")));
public static Map<Integer, List<String>> wordsByLength(String file) throws IOException {
    return Files.lines(Paths.get(file))                      //Stream<String>
            .map(a -> a.split(" "))                          //Stream<String[]>
            .flatMap(Arrays::stream)                         //Stream<String>
            .collect(Collectors.groupingBy(String::length)); //Map<Integer, List<String>>
}