现在,我有一个程序询问用户他们将输入多少个字符串,然后我使用 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/