如何将字符串拆分为字符串流?

如何将字符串拆分为字符串流?,第1张

如何将字符串拆分为字符串流?
Arrays.stream
/
String.split

由于

String.split
返回数组
String[]
,因此我始终建议您
Arrays.stream
使用流式处理数组的规范用法。

String input = "dog,cat,bird";Stream<String> stream = Arrays.stream(input.split( "," ));stream.forEach(System.out::println);
Stream.of
/
String.split

Stream.of
是一个
varargs
方法,它恰好接受一个数组,这是由于varargs方法是通过数组实现的,并且在将varargs引入Java以及改型为接受可变参数的现有方法时,存在兼容性方面的问题。

Stream<String> stream = Stream.of(input.split(","));     // works, but is non-idiomaticStream<String> stream = Stream.of("dog", "cat", "bird"); // intended use case
Pattern.splitAsStream

Pattern.compile(",").splitAsStream(string)
具有直接流式传输而不是创建中间数组的优势。因此,对于大量的子字符串,这可以带来性能上的好处。另一方面,如果定界符很小,即单个文字字符,则
String.split
实现将通过快速路径而不是使用正则表达式引擎。因此,在这种情况下,答案并不简单。

Stream<String> stream = Pattern.compile(",").splitAsStream(input);

如果流发生在另一个流内部,例如,

.flatMap(Pattern.compile(pattern)::splitAsStream)
存在的优势是模式仅需分析一次,而不是针对外部流的每个字符串进行分析。

Stream<String> stream = Stream.of("a,b", "c,d,e", "f", "g,h,i,j")    .flatMap(Pattern.compile(",")::splitAsStream);

这是形式为方法的引用的属性

expression::name
,将在创建功能接口的实例时对表达式进行评估并捕获结果,如[System.out ::println的等效lambda表达式中所述。使用方法引用而不是lambda表达式引发NullPointerException



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5506095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存