繁体   English   中英

java 8 是否有任何替代正常 while 循环的方法?

[英]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是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。 建议任何寻求此功能的人改用Stringsplit方法或 java.util.regex 包。

后者就是这个答案的作用。

文档链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM