[英]Does java 8 having any alternative of normal while loop?
我需要 Java 8 中的 while 循环替代方案,我们可以通过流来实现吗?
使用while循环,我们可以通过下面的代码获取字符串令牌
StringTokenizer stringTokenizer=new StringTokenizer("this is a text string"," ");
while(stringTokenizer.hasMoreTokens()) {
System.out.println(stringTokenizer.nextToken());
}
但是使用流,我们如何实现呢? 请建议
这是代码:
Collections.list(new StringTokenizer("this is a text string", " ")).stream()
.map(token -> (String) token)
.forEach(System.out::println);
输出:
this
is
a
text
string
再一个样品
List<String> collect = Collections.list(new StringTokenizer("this is a text string", " ")).stream()
.map(token -> (String) token)
.collect(Collectors.toList());
System.out.println(collect);
输出:
[this, is, a, text, string]
我只是在这里使用String#split
和一个流:
String input = "this is a text string";
Arrays.stream(input.split("\\s+"))
.forEach(System.out::println);
正如评论中指出的StringTokenizer
是一个旧类。 作为替代方案,您可以简单地使用String::split
方法,然后从返回的数组中创建一个Stream
:
String text = "this is a text string";
Arrays.stream(text.split("\\s")).forEach(System.out::println);
@VGR 在评论中完全正确,自 Java 8(即自引入流以来)以来, Pattern
类已经配备了splitAsStream
方法,该方法非常适合获取字符串的单词流。 例如:
Pattern delimiterPattern = Pattern.compile(" ");
String originalString = "this is a text string";
List<String> collect = delimiterPattern.splitAsStream(originalString)
.collect(Collectors.toList());
System.out.println(collect);
输出:
[this, is, a, text, string]
或者,如果您只想按照您的问题打印流元素:
delimiterPattern.splitAsStream(originalString).forEach(System.out::println);
this is a text string
文档说:
StringTokenizer
是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。 建议任何寻求此功能的人改用String
的split
方法或 java.util.regex 包。
后者就是这个答案的作用。
文档链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.