是否可以用基于流的构造替换Java中的所有循环结构?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是否可以用基于流的构造替换Java中的所有循环结构?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1691字,纯文字阅读大概需要3分钟。
内容图文
![是否可以用基于流的构造替换Java中的所有循环结构?](/upload/InfoBanner/zyjiaocheng/757/4530fe207aca4e8f827687a2ff6e05d0.jpg)
我正在探索Java Stream API的可能性,以便找出是否可以用基于流的构造替换所有基于循环的构造.
作为一个可能暗示这实际上是可行的假设的例子,请考虑这个:
是否可以使用Stream API将包含由空格分隔的单词的字符串拆分为字符串数组,如下面的String.split(String)调用所做的那样?
String [] tokens =“Peter Paul Mary”.split(“”);
我知道基于流的解决方案可以使自己使用String.split(String)方法,如下所示:
Stream.of("Peter Paul Mary".split(" "))
.collect(Collectors.toList());
或者使用Pattern.splitAsStream(CharSequence)(其实现当然使用基于循环的方法),但我正在寻找一个仅限流的解决方案,这意味着这个Haskell片段的内容:
words :: String -> [String]
words s = case dropWhile Char.isSpace s of
"" -> []
s' -> w : words s''
where (w, s'') = break Char.isSpace s'
我问这个是因为我仍然想知道Stream API的引入是否会导致我们在Java中处理对象集合的方式发生深刻变化,或者只是为它添加另一个选项,从而使维护更大的代码库变得更具挑战性而不是从长远来看简化这项任务.
编辑:虽然有一个公认的答案(见下文),但它只表明它可能在这种特殊情况下.我仍然对问题所要求的一般案例的任何提示感兴趣.
解决方法:
只是为了好玩(这是一种可怕的方式),我也不知道这是否符合您的需求:
List<String> result = ",,,abc,def".codePoints()
.boxed()
// .parallel()
.collect(Collector.of(
() -> {
List<StringBuilder> inner = new ArrayList<>();
inner.add(new StringBuilder());
return inner;
},
(List<StringBuilder> list, Integer character) -> {
StringBuilder last = list.get(list.size() - 1);
if (character == ',') {
list.add(new StringBuilder());
} else {
last.appendCodePoint(character);
}
},
(left, right) -> {
left.get(left.size() - 1).append(right.remove(0));
left.addAll(right);
return left;
},
list -> list.stream()
.map(StringBuilder::toString)
.filter(x -> !x.equals(""))
.collect(Collectors.toList())
));
内容总结
以上是互联网集市为您收集整理的是否可以用基于流的构造替换Java中的所有循环结构?全部内容,希望文章能够帮你解决是否可以用基于流的构造替换Java中的所有循环结构?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。