为什么 char[] 是 Arrays.stream() 不支持的唯一数组?
在介绍将基元数组转换为 Streams 的方法时,我发现不支持这些数组,而支持其他基元数组类型。有什么特别的理由把它们留在流中吗?char[]
在介绍将基元数组转换为 Streams 的方法时,我发现不支持这些数组,而支持其他基元数组类型。有什么特别的理由把它们留在流中吗?char[]
当然,答案是“因为这是设计师的决定”。没有技术原因可以不存在。CharStream
如果你想要理由,你通常需要转动OpenJDK邮件列表*。JDK的文档没有证明为什么任何东西都是为什么它是它的习惯。
有人问
使用 IntStream 来表示字符/字节流有点不方便。我们是否也应该添加CharStream和ByteStream?
Brian Goetz(Java语言架构师)的回复说
简短的回答:不。
对于这些几乎从未使用过的形式,不值得再增加100K +的JDK足迹。如果我们添加这些,有人会要求做空,浮点或布尔值。
換句話說,如果人們堅持我們擁有所有原始專業化,我們就沒有原始專業化。这将比现状更糟。
他在其他地方也说了同样的话。
如果你想把它们当作字符来处理,你可以很容易地把它们降级为字符。这似乎不是一个足够重要的用例,没有一整组“其他流”。(与短,字节,浮点数相同)。
TL;DR:不值得维护成本。
*如果你很好奇,我使用的谷歌查询是
site:http://mail.openjdk.java.net/ charstream
正如Eran所说,这不是唯一一个失踪的人。
A 将是无用的,a(如果它存在)可以作为 a 处理或转换为 (as can),并且可以作为 .BooleanStream
ByteStream
InputStream
IntStream
short
float
DoubleStream
由于无论如何都无法表示所有字符(请参阅链接),因此它将是一个遗留流。尽管大多数人无论如何都不必处理代码点,所以它看起来很奇怪。我的意思是你使用时没有想到“这实际上并不适用于所有情况”。char
String.charAt()
所以有些事情被排除在外,因为它们被认为不那么重要。正如JB Nizet在链接的问题中所说:
设计人员明确选择通过将基元流限制为3种类型来避免类和方法的爆炸式增长,因为其他类型(char,short,float)可以用它们更大的等效项(int,double)表示,而不会有任何显着的性能损失。
原因是无用的,因为你只有2个值,这限制了操作很多。无需执行数学运算,您使用大量布尔值的频率是多少?BooleanStream
从注释中可以看出,不需要 a。如果是这样的话,将会有很多实际的用例而不是理论情况,一个用例可以追溯到Java 1.4,并且与循环的谬误比较。BooleanStream
while