我需要得到一个字符串[]从一个集<字符串>,但我不知道如何做到这一点。以下操作失败:

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

我怎样才能让它正常工作呢?


当前回答

使用Set#toArray(IntFunction<T[]>)方法,将IntFunction作为生成器。

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

如果您还没有使用Java 11,那么使用Set#toArray(T[])方法,接受相同大小的类型化数组参数。

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

虽然仍然不在Java 11上,并且您不能保证myset在转换为数组时不可修改,但最好指定一个空类型数组。

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

其他回答

番石榴风格:

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

使用Set#toArray(IntFunction<T[]>)方法,将IntFunction作为生成器。

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

如果您还没有使用Java 11,那么使用Set#toArray(T[])方法,接受相同大小的类型化数组参数。

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

虽然仍然不在Java 11上,并且您不能保证myset在转换为数组时不可修改,但最好指定一个空类型数组。

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

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

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

我也面临着同样的情况。

我首先声明我需要的结构:

设置<String> myKeysInSet = null; String[] myArrayOfString = null;

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

myKeysInSet = json_any.keySet();

这样,我就有了一个包含所有键的Set结构,因为我需要它。我只需要把值放到字符串数组中。请看下面的代码:

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

这是我在StackOverflow的第一个答案。 很抱歉有任何错误:D