我正在添加屏幕截图以获取更多信息。我是 Java8 的新手,如果我问的问题不好,请原谅我。当我研究空格分隔值的输入时,我得到了这个陈述。
我了解以下声明的值(value)为 1 2 3
并返回值 [1, 2, 3]
作为列表。
如果我错了,请纠正我
,
替换空间稍后它被解析为 Integer 并被收集到 List 我的疑问是当我输入
1 2 3
这是一个字符串。那么,这个流是先用空间分割值然后迭代分割值吗?还是第一次解析值,然后将值存储在列表中,稍后将值与空格分开并删除空格并替换为 ,
.我很好奇,下面的语句究竟是如何工作的。List<Integer> a = Stream.of(bufferedReader.readLine().replaceAll("\\s$", "").split(" "))
.map(Integer::parseInt)
.collect(toList());
[1]: /image/nlXxd.jpg
最佳答案
bufferedReader.readLine()
读取一行,作为 String
.该字符串未分配给任何变量。 replaceAll("\\s$", "")
anchor 定在行尾并删除最后一个空格。使用 String#trim
会更好。 split(" ")
将字符串拆分为 String[]
,在空格处将其分开 Stream.of(String[])
需要String[]
我们现在有并返回 Stream<String>
Stream<String>.map(Function<String, Integer>)
转换 Stream<String>
成Stream<Integer>
通过将映射函数 ( Integer::parseInt
) 应用于流 Stream<Integer>#collect(toList())
需要一个 String<Integer>
并将其收集到 List<Integer>
List<Integer> a = ...
将上述步骤的结果赋给变量 a
然后你就完成了。
您在使用
System.out.println(a)
时看到的逗号通过调用 List#toString()
产生(实际上, AbstractCollection#toString
,它被大多数 List 实现通过 Abstractlist
继承),它产生一个逗号分隔的值列表,用方括号括起来。这是一个字符串表示,便于我们人类阅读,与列表的内部存储方式无关。在 ArrayList
例如,内部存储将是 Integer[]
,其他列表实现使用其他数据结构。一些调试器类似地将列表和数组的内容显示为逗号分隔的列表——这再次纯粹是为了更容易阅读。
关于java - 试图理解以下语句的完整含义 Stream.of(bufferedReader.readLine().replaceAll ("\\s$", ""),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62409119/