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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)