Java 8 - 类型不匹配:无法从List <serializable>转换为List <string>

时间:2017-01-10 15:00:09

标签: java arrays eclipse java-8 java-stream

我有一个字符串列表:

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());

Eclipse Neon建议区别在于flatMap返回类型。首先flatMap返回List<Serializable>秒,返回List<String>

Stream.of()Arrays.stream()都返回<T> Stream<T>(Eclipse表示它们都返回Stream<String>)。

同样,Stream.of()在内部使用(并返回)Arrays.stream()的输出。那么,第一种情况又是什么问题?

1 个答案:

答案 0 :(得分:6)

这是一个Eclipse bug

Bug 508834,感谢@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[]>?即什么是varags的类型;你传递你的数组是第一个参数(所以varargs是一个数组数组)还是你把数组作为所有参数传递?

那是你的问题。