java - 是否可以要求一定数量的输入并在单个流中对它们进行处理?

标签 java java-8 java-stream

现在,我有一个程序询问用户他们将输入多少个字符串,然后我使用 IntStream遍历那么多并将每个添加到列表中。

final List<String> patterns = new ArrayList<>();

final int testCaseNumber = Integer.parseInt(scan.nextLine());

IntStream.range(0, testCaseNumber).forEach(i -> patterns.add(scan.nextLine()));

然后,我有另一个流操作在这个列表上做其他事情。

patterns.stream().forEach(pattern -> doSomething());

有没有办法跳过模式的使用 List完全,直接从IntStream到 final forEach()陈述?

我试过使用 mapToObj()peek() ,但两者都没有按照我希望的方式工作。

最佳答案

你可以拥有

IntStream.range(0, testCaseNumber)
         .mapToObj(i -> scan.nextLine())
         .forEach(input -> doSomething(input));

这会创建一个 IntStream从 0 到所需的输入数量,并将每个输入映射到用户使用 mapToObj 输入的内容.

另一方面,如果您想先收集所有输入并在之后处理它们,那么您将必须存储这些:

List<String> inputs =
    IntStream.range(0, testCaseNumber)
             .mapToObj(i -> scan.nextLine())
             .collect(Collectors.toList());
// ...
inputs.forEach(input -> doSomething(input));

请注意,在这种情况下,使用 Stream API 确实没有特别的理由,您最好使用简单的 for 循环。

关于java - 是否可以要求一定数量的输入并在单个流中对它们进行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386246/

相关文章:

Java 8 lambda 表达式字节码一致性

java - 是否可以使用流将字符串分组并在有序的 Java 列表中对组成员进行计数?

java - 使用 Java 8 Stream 解析 .csv 文件

java - JAR 版本控制

java - 根据搜索过滤器参数创建动态 SQL 查询

java - 无法打开 ServletContext 资源 [/templates/show.xsl]

dictionary - Java 8 将 Map<Department, List<Person>> 转换为 Map<Department, List<String>>

java - 访客与组合

java - 如果某个项目多次出现,则删除列表中该项目的所有实例

java - 尽管安装了 JDK,但库中没有 Java 文件夹