我有一个字符串列表:
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()
的输出。那么,第一种情况又是什么问题?
答案 0 :(得分:6)
注意方法签名:
//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是一个数组数组)还是你把数组作为所有参数传递?
那是你的问题。