我在map下面定义了一个像,它有字符串列表作为值
Map<Integer,List<String>> MapOf_words_arrays = new HashMap<Integer,List<String>>();
Run Code Online (Sandbox Code Playgroud)
我需要将上面 Map 的值放入一个字符串数组中(例如如下所示),。
["dog","cat"]
["book","pen","phone","waterbottle"]
.
.
.etc
Run Code Online (Sandbox Code Playgroud)
我正在使用以下语句
String wordlists = MapOf_words_arrays.values().toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误
线程“main”中的异常 java.lang.ArrayStoreException: java.util.ArrayList$SubList at java.util.AbstractCollection.toArray(AbstractCollection.java:196) at ScrapePages.main(ScrapePages.java:98)
有人可以帮我吗?
ArrayStoreException意味着您试图将错误类型的元素存储到错误类型的数组中(请参阅其文档)。
你在打电话
values().toArray(new String[0])
Run Code Online (Sandbox Code Playgroud)
因此,您尝试将某些内容存储到一个接受String其元素的数组中。但是在您的情况下Map#values不会返回String,它会返回一个Collection包含类型的元素List<String>。这就是为什么它想要一个 type 的数组List,而不是String.
首先,您需要拼合所有子列表为一体。为此,您有多种选择。最直接的解决办法是迭代的所有元素,然后将它们添加到另一个List,然后转换此表到数组:
List<String> valuesFlatten = new ArrayList<>();
// Flatten all values
for (List<String> valueContainer : MapOf_words_arrays.values()) {
valuesFlatten.addAll(valueContainer);
}
// Create and fill the array
String[] result = new String[valuesFlatte.size()];
valuesFlatten.toArray(result);
Run Code Online (Sandbox Code Playgroud)
或者更紧凑,使用Streams ( Java 8 )的解决方案:
String[] result = MapOf_words_arrays.values().stream() // List<String>
.flatMap(List::stream) // String
.toArray(String[]::new)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2348 次 |
| 最近记录: |