有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组Java 8类型不匹配:无法从列表<Serializable>转换为列表<String>

我有一个字符串列表:

List<String> list = Arrays.asList("a1,a2", "b1,b2");

然后,要转换列表中的所有内容,如:"a1","a2","b1","b2",请编写以下代码:

List<String> ss1 = list.stream()
                       .flatMap(s -> Stream.of(s.split(",")))
                       .collect(Collectors.toList());

但是我有一个错误:“类型不匹配:无法从List<Serializable>转换到List<String>。我将问题处理为:

List<String> ss2 = list.stream()
                       .flatMap(s -> Arrays.stream(s.split(",")))
                       .collect(Collectors.toList());

EclipseNeon表明差异在于flatMap返回类型。第一个flatMap返回一个List<Serializable>,第二个返回一个List<String>

但是Stream.of()Arrays.stream()都返回一个<T> Stream<T>(Eclipse表明它们都返回一个Stream<String>

同样地,Stream.of()在内部使用(并返回的输出)Arrays.stream()。那么,再说一遍,第一个案例有什么问题


共 (1) 个答案

  1. # 1 楼答案

    这是一个Eclipse错误

    感谢@Tunaki


    请注意方法签名:

    //Stream.of
    <T> Stream<T> of(T... values)
    //Arrays.stream
    <T> Stream<T> stream(T[] array)
    

    现在,对于Arrays.stream,很明显,使用类型为T的数组的调用将返回Stream<T>。但是Stream.of它应该返回Stream<T>还是Stream<T[]>?i、 e.瓦拉格的类型是什么;您是将数组作为第一个参数传递(因此varargs是数组的数组),还是将数组作为all参数传递

    这是你的问题