下面的代码在给定的用户输入中查找数字5的位置。有没有一种方法可以通过延迟评估使用Java 8 Streams编写以下代码,而无需将数据存储在内存中。
public class HelloWorld{
public static void main(String []args){
Scanner s=new Scanner(System.in);
int count=0;
while(s.hasNextInt()){
count++;
if(s.nextInt()==5){
break;
}
}
System.out.println(count);
}
}
问题来源:Stack Overflow
TL; DR:不要在迭代方法比较好的地方使用流。
尽管可以完成,但这种转换效率低下或非常棘手,无论如何都会破坏流的目的。您的代码中有两个地方,使得这里的迭代方法比流式处理更可取:
您变异一个状态变量count,而流函数最好应该是无状态的
您可以使用break它来过早地完成迭代,而流通常要等到所有元素都处理完后才能完成。
可能会过早中断流,但这很[棘手] (https://www.baeldung.com/java-break-stream-foreach)。也可以通过将输入的每个标记与其序号配对来避免对外部变量进行突变,但是结果代码将变得更慢且更难阅读。
代码示例如下所示:
System.out.println(new BufferedReader(new InputStreamReader(System.in)).lines()
.mapToInt(Integer::valueOf)
.takeWhile(number -> number != 5)
.count() + 1);
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。