我有一个字符串列表:
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()
(并返回其输出)。那么,在第一种情况下又有什么问题呢? 最佳答案
这是一个Eclipse错误
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是数组的数组),还是将数组作为所有参数传递?那是你的问题。