使用 Stream.of
创建通用流非常方便,但是如果我想创建一个 Stream<String[]>
怎么办?只有一个元素?
假设我有:
String[] tropicalFruits = new String[] {"pineapple", "banana", "mango"};
String[] fruits = new String[] {"melon", "peach", "apple"};
然后 Stream.of(tropicalFruits, fruits)
产生 Stream<String[]>
的两个元素。如何为单个元素的流实现相同的效果?如果我尝试:
Stream<String[]> fruityStream = Stream.of(tropicalFruits);
我明白了:
Error: incompatible types: inference variable
T
has incompatible bounds
equality constraints:java.lang.String[]
lower bounds:java.lang.String
Stream<String[]> fruityStream = Stream.of(fruits); ^---------------^
我已经用谷歌搜索过这个并在 SO 中搜索过,但我什么也没得到。在我看来,这不是一个非常不寻常或深奥的问题,所以我没有得到任何答案(或者我没有使用正确的关键字搜索)有点令人惊讶。
最佳答案
解决方案
Stream<String[]> stream = Stream.<String[]>of(tropicalFruits);
或
Stream<String[]> stream = Stream.of(new String[][]{tropicalFruits});
说明
生成 Stream<T>
, Stream.of
需要 T
或 T...
.
一个 T[]
参数完全适用于第二个签名。
因此,通过 String[]
调用 Stream.of(String...)
版本。
要改变这种行为,我们需要提供一些关于 T
的额外信息。 (1) 或更清楚地定义它(=明确)(2)。
我想到了两个想法:
- 明确指定方法的类型参数以使用第一个签名。
Stream.<String[]>of(new String[]{})
将产生Stream<String[]>
. - 包装
T[]
T[][]
中的值数组使用第二个签名。
Stream.of(new String[][]{})
将产生Stream<String[]>
.
关于java - 如何使用 Stream.of 创建一个只有一个元素的 Stream<String[]>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48625611/