我有一个字符串列表:

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是数组的数组),还是将数组作为所有参数传递?

那是你的问题。

10-05 19:44
查看更多