当前位置: 首页 > 知识库问答 >
问题:

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

孟意致
2023-03-14

给定一个文件,我们可以使用将其转换为字符串流,例如。,

Stream<String> lines = Files.lines(Paths.get("input.txt"))

我们能否以类似的方式从标准输入构建行流?

共有3个答案

孟高峰
2023-03-14

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

例如:

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();

卢俊发
2023-03-14

您可以仅使用ScannerStream组合::生成

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

或者(如果用户在达到限制之前终止,为避免出现NoTouchElementException):

Iterable<String> it = () -> new Scanner(System.in);

List<String> input = StreamSupport.stream(it.spliterator(), false)
            .limit(numberOfLinesToBeRead)
            .collect(Collectors.toList());
劳研
2023-03-14

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

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Stream<String> stream = in.lines().limit(numberOfLinesToBeRead);
 类似资料:
  • 问题内容: 我正在尝试使用Console类从用户获取输入,但是在调用时返回空对象。使用System.console之前我是否需要更改任何内容? 问题答案: 使用控制台读取输入(仅在IDE外部可用): 另一种方法(适用于所有地方): 因此,如果你真的需要使用

  • 问题内容: 尽管有一些阅读,但我遇到了一些我仍难以理解的代码。调用了一个方法,该方法需要两个参数,其中一个是Runnable。尽管有一个lambda,但没有传递Runnable对象。 例如: 所以我的问题是,你能解释一下如何从lambda创建一个Runnable吗,也请有人解释一下语法 () -> {}。具体来说,()括号是什么意思? 谢谢。 问题答案: Lambda可以在需要功能接口的任何地方使

  • 是否可以从迭代器创建一个流,其中对象的序列与通过反复调用迭代器的next()方法生成的序列相同?我所考虑的具体情况涉及到Treeset.desceningIterator()返回的迭代器的使用,但是我可以想象在其他情况下,迭代器是可用的,而不是它所引用的集合。 例如,对于,我们可以编写并按照该集合的排序顺序获取该集合中的对象流,但是如果我们希望它们按照不同的顺序,比如通过使用获得的顺序呢?我想象的

  • 我有一个这样的文本文件: ids.txt 我想读取这个文件并加载到二维数组中。我希望有一个类似于下面的数组: 如何解决此异常?

  • 我遵循了关于创建Android库的官方指南,但有些东西似乎不太适合我。 我的项目由两个模块组成。一个名为“app”的app模块和一个名为“BFSDK”的库模块。在我的应用程序的文件中,我包含了库,如下所示: 然后在我的库模块中,my在第一行指定它是库: 在Project窗口中选择库模块,然后单击Build>Build APK 这将构建AAR文件。然而: 当我点击这个并等待整个构建过程完成时,我在任