如何从System.in / System.console()构建Java 8流?

时间:2015-03-19 20:30:47

标签: java java-8 java-stream

给定一个文件,我们可以使用例如

将其转换为字符串流
Stream<String> lines = Files.lines(Paths.get("input.txt"))

我们可以用类似的方式从标准输入构建一个行流吗?

3 个答案:

答案 0 :(得分:26)

kocko答案的汇编和Holger的评论:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Stream<String> stream = in.lines().limit(numberOfLinesToBeRead);

答案 1 :(得分:1)

通常标准输入是逐行读取的,因此您可以做的是将所有读取行存储到集合中,然后创建一个对其进行操作的Stream

例如:

List<String> allReadLines = new ArrayList<String>();

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s;
while ((s = in.readLine()) != null && s.length() != 0) {
    allReadLines.add(s);
}

Stream<String> stream = allReadLines.stream();

答案 2 :(得分:1)

您只能将ScannerStream::generate结合使用:

Scanner in = new Scanner(System.in);
List<String> input = Stream.generate(in::next)
                           .limit(numberOfLinesToBeRead)
                           .collect(Collectors.toList());