开发者社区> 问答> 正文

获取用户输入值并使用Java中的Streams处理它们

下面的代码在给定的用户输入中查找数字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

展开
收起
montos 2020-03-25 10:08:37 587 0
1 条回答
写回答
取消 提交回答
  • 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

    2020-03-25 10:09:26
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载