java - 如何使用 Stream.of 创建一个只有一个元素的 Stream<String[]>?

标签 java java-8 java-stream variadic-functions type-inference

使用 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)。

我想到了两个想法:

  1. 明确指定方法的类型参数以使用第一个签名。
    Stream.<String[]>of(new String[]{})将产生 Stream<String[]> .
  2. 包装 T[] T[][] 中的值数组使用第二个签名。
    Stream.of(new String[][]{})将产生 Stream<String[]> .

关于java - 如何使用 Stream.of 创建一个只有一个元素的 Stream<String[]>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48625611/

相关文章:

java - 如何找到一个元素的前 N ​​个 sibling

java - 获取 BigDecimal 的指数

java - jasper grails 插件升级到 Java8 失败

java - 如何以可移植的方式分配堆外字节缓冲区?

java - 如何从列表中获取仅重复对象的列表

java - 累积另一个列表中列表的计数

java - Libgdx 在屏幕中使用 InputMultiplexer 覆盖 keyDown

java - 如何检测jframe边框上的鼠标释放?

java - 为什么 flatMap() 之后的 filter() 在 Java 流中是 "not completely"惰性?

Java 流 - 浏览和跳过