现在,我有一个程序会询问用户输入的字符串数量,然后我使用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()
,但这两种方法都不符合我的要求。
答案 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
循环。