gpt4 book ai didi

java - 将 map 中的列表展平为单个列表

转载 作者:行者123 更新时间:2023-11-30 06:46:41 24 4
gpt4 key购买 nike

我已经定义了一个如下所示的 map,它以字符串列表作为值

Map<Integer,List<String>> MapOf_words_arrays = new HashMap<Integer,List<String>>();

我需要将上述 Map 的值放入一个字符串数组(例如如下所示),.

["dog","cat"]
["book","pen","phone","waterbottle"]
.
.
.etc

我正在使用下面的语句

String wordlists = MapOf_words_arrays.values().toArray(new String[0]);

但是我遇到了一个错误

Exception in thread "main" java.lang.ArrayStoreException: java.util.ArrayList$SubList at java.util.AbstractCollection.toArray(AbstractCollection.java:196) at ScrapePages.main(ScrapePages.java:98)

有人可以帮我吗?

最佳答案

解释

ArrayStoreException意味着您正在尝试将元素的错误类型存储到错误类型的数组中(请参阅其 documentation )。

你在打电话

values().toArray(new String[0])

因此,您尝试将一些内容存储到接受 String 的数组中作为它的元素。然而Map#values不返回 String在你的例子中,它返回一个 Collection包含 List<String> 类型的元素.这就是为什么它需要一个 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);

或者更紧凑,使用 Stream 的解决方案s(Java 8):

String[] result = MapOf_words_arrays.values().stream()  // List<String>
.flatMap(List::stream) // String
.toArray(String[]::new)

关于java - 将 map 中的列表展平为单个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com