fre*_*dev 10 java eclipse arrays java-8 java-stream
我有一个字符串列表:
List<String> list = Arrays.asList("a1,a2", "b1,b2");
Run Code Online (Sandbox Code Playgroud)
然后转换列表中的所有内容,如:"a1","a2","b1","b2"写道:
List<String> ss1 = list.stream()
.flatMap(s -> Stream.of(s.split(",")))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但我有一个错误:"类型不匹配:无法转换List<Serializable>为List<String>".我把问题改成了这个:
List<String> ss2 = list.stream()
.flatMap(s -> Arrays.stream(s.split(",")))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
Eclipse Neon表明不同之处在于flatMap返回类型.首先flatMap返回List<Serializable>第二个返回a List<String>.
但两者Stream.of()并Arrays.stream()返回<T> Stream<T>(Eclipse的建议,他们都回报Stream<String>).
再次,Stream.of()内部使用(并返回输出)Arrays.stream().那么,第一种情况又是怎么回事呢?
注意方法签名:
//Stream.of
<T> Stream<T> of(T... values)
//Arrays.stream
<T> Stream<T> stream(T[] array)
Run Code Online (Sandbox Code Playgroud)
现在,因为Arrays.stream很明显,具有类型数组的调用T将返回a Stream<T>.但它Stream.of应该返回Stream<T>还是Stream<T[]>?即什么是varags的类型; 你传递你的数组是第一个参数(所以varargs是一个数组数组)还是你传递你的数组作为所有参数?
那是你的问题.