Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何转换集合<;设置<;字符串>&燃气轮机;转换为字符串数组_Java_Collections - Fatal编程技术网

Java 如何转换集合<;设置<;字符串>&燃气轮机;转换为字符串数组

Java 如何转换集合<;设置<;字符串>&燃气轮机;转换为字符串数组,java,collections,Java,Collections,当我试图转换时,我得到以下异常 这是我的密码 Map Map=newhashmap(); String[]keySet=map.keySet().toArray(新字符串[map.size()]); 集合集合=map.values(); String[]values=collection.toArray(新字符串[collection.size()]);//在这一行中出现异常 您试图做的是不可能的。这一点在文档中有明确说明 toArray方法被记录为抛出: 如果指定数组的运行时类型不是 此集合中

当我试图转换时,我得到以下异常

这是我的密码

Map Map=newhashmap();
String[]keySet=map.keySet().toArray(新字符串[map.size()]);
集合集合=map.values();
String[]values=collection.toArray(新字符串[collection.size()]);//在这一行中出现异常

您试图做的是不可能的。这一点在文档中有明确说明

toArray
方法被记录为抛出:

如果指定数组的运行时类型不是 此集合中每个元素的运行时类型

相反,您可以做的是从映射值创建一个流,flatMap it!(即折叠嵌套序列)然后收集到一个数组:

 map.values()  // Collection<Set<String>>
    .stream()  // Stream<Set<String>>
    .flatMap(Collection::stream) // Stream<String>
    .toArray(String[]::new); // String[]
map.values()//集合
.stream()//流
.flatMap(集合::流)//流
.toArray(字符串[]::新建);//字符串[]
您只需在对
值进行流式处理时使用
即可将其收集到阵列中。这可以通过以下方式实现:

String[] values = map.values().stream()
                  .flatMap(Collection::stream)
                  .toArray(String[]::new);
注意:即使使用

toArray(new String[collection.size()])
这是因为编译器在执行泛型类型之前很难确定类型。这也是为什么

Integer[] values = collections.toArray(new Integer[collections.size()]);
将在您的情况下编译,但是您现在可以清楚地看到,在您的集合中没有任何地方有
Integer
类型。因此,在运行时,将使用指定数组的运行时类型和此集合的大小分配一个新数组

这就是您案例中的
ArrayStoreException
的原因,因为现在您的集合的类型是
Set
,而不是
String


重要:你不可能像你进一步想的那样。

期望的结果是什么?请给出一个原始集合和所需数组内容的示例。一开始我对您的代码编译感到惊讶。在编译时应该知道,不能将
集合
强制转换为
字符串
,因此将原始集合中的集合存储到字符串数组中肯定会失败。但是,该参数很难泛化,因此
Collection.toArray
在编译时接受任何数组类型(如果集合为空或仅包含null,则即使使用不兼容的类型也可能成功)。
toArray(new String[collection.size()])
Integer[] values = collections.toArray(new Integer[collections.size()]);