如何将Set <string>转换为String []?</string>

时间:2011-05-12 18:14:04

标签: java

我需要从String[]中获得Set<String>,但我不知道该怎么做。以下失败:

Map<String, ?> myMap = gpxlist.getAll();
Set<String> myset = myMap.keySet();
String[] GPXFILES1 = (String[]) myset.toArray(); // Here it fails.

如何修复它以使其有效?

6 个答案:

答案 0 :(得分:439)

使用Set#toArray(T[])方法获取相同大小的类型化数组参数。

String[] GPXFILES1 = myset.toArray(new String[myset.size()]);

也可以使用不同的大小,但这会强制toArray()方法创建一个新的数组来返回而不是重用提供的参数,这可能最终效率较低。

另见the source code of AbstractCollection#toArray()

答案 1 :(得分:37)

使用toArray(T[] a)方法:

String[] array = set.toArray(new String[0]);

答案 2 :(得分:5)

番石榴风格:

Set<String> myset = myMap.keySet();
FluentIterable.from(mySet).toArray(String.class);

更多信息:https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/FluentIterable.html

答案 3 :(得分:1)

在Java 11中,我们可以使用Collection.toArray(generator)方法。以下代码将创建一个新的String数组:

Set<String> set = Set.of("one", "two", "three");
String[] array = set.toArray(String[]::new)

请参阅:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html#toArray(java.util.function.IntFunction)

答案 4 :(得分:1)

Set<String> stringSet= new HashSet<>();
String[] s = (String[])stringSet.toArray();

答案 5 :(得分:0)

我遇到了同样的情况。

我首先宣布我需要的结构:

Set<String> myKeysInSet = null; String[] myArrayOfString = null;

在我的例子中,我有一个JSON对象,我需要将这个JSON中的所有键存储在一个字符串数组中。使用GSON library,我使用JSON.keySet()来获取密钥并移动到我的集合:

myKeysInSet = json_any.keySet();

有了这个,我有一个包含所有键的Set结构,因为我需要它。所以我只需要我的字符串数组的值。请参阅以下代码:

<强> myArrayOfString = myKeysInSet.toArray(new String[myKeysInSet.size()]);

这是我在StackOverflow中的第一个答案。 对不起任何错误:D