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

2022-08-31 05:07:43

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

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

我该如何修复它,使其正常工作?


答案 1

使用 Set#toArray(IntFunction<T[]>) 方法将 a 作为生成器。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]);

答案 2

Java 11

接口中的新默认方法允许将集合的元素传输到所需运行时类型的新创建的数组。采用参数,可以用作:toArrayCollectionIntFunction<T[]> generator

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

已经有一个类似的方法,这种添加意味着我们不再能够作为参数传递,因为在这种情况下,对该方法的引用将是模棱两可的。但这仍然是可以的,因为无论如何,这两种方法都会抛出NPE。Collection.toArray(T[])null

爪哇 8

在Java 8中,我们可以使用streams API:

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

我们还可以利用 toArray() 的重载版本,它采用:IntFunction<A[]> generator

String[] array = set.stream().toArray(n -> new String[n]);

这里的生成器函数的目的是取一个整数(所需数组的大小)并生成所需大小的数组。我个人更喜欢使用方法引用的前一种方法,而不是使用lambda表达式的后一种方法。


推荐