我有一个字符串列表:
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()
的输出结果。所以,第一个例子中到底出了什么问题呢?
flatMap
的使用案例中:.flatMap(Pattern.compile(",")::splitAsStream)
... - HolgerString.split
将走快速路径,而不使用正则表达式引擎。但仍然意味着创建并急切地填充数组。 - Holger