是否可以要求一定数量的输入并在单个流中对它们执行某些操作?

时间:2016-04-03 13:52:56

标签: java java-8 java-stream

现在,我有一个程序会询问用户输入的字符串数量,然后我使用IntStream来浏览那些字符串并将每个字符串添加到List中。

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转到最终forEach()语句?

我已尝试使用mapToObj()peek(),但这两种方法都不符合我的要求。

1 个答案:

答案 0 :(得分:3)

你可以拥有

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循环。