我需要得到一个String[]出来的Set<String>,但我不知道该怎么做.以下失败:
Map<String, ?> myMap = gpxlist.getAll();
Set<String> myset = myMap.keySet();
String[] GPXFILES1 = (String[]) myset.toArray(); // Here it fails.
Run Code Online (Sandbox Code Playgroud)
我该如何修复以使其有效?
Bal*_*usC 452
使用该Set#toArray(T[])方法采用相同大小的类型化数组参数.
String[] GPXFILES1 = myset.toArray(new String[myset.size()]);
Run Code Online (Sandbox Code Playgroud)
也可以使用不同的大小,但这会强制该toArray()方法创建一个新的数组来返回而不是重用所提供的参数,这可能最终效率较低.
另见源代码AbstractCollection#toArray().
i_a*_*ero 55
接口中的新默认toArray方法Collection允许将集合的元素传输到新创建的所需运行时类型的数组.它需要IntFunction<T[]> generator作为参数,可作为:
String[] array = set.toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)
已经存在类似的方法,Collection.toArray(T[])并且这种添加意味着我们不再能够传递,null因为该方法的引用将是模糊的.但它仍然没问题,因为无论如何这两种方法都会抛出NPE.
在Java 8中,我们可以使用流API:
String[] array = set.stream().toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)
我们还可以使用toArray()的重载版本,其中IntFunction<A[]> generator包含:
String[] array = set.stream().toArray(n -> new String[n]);
Run Code Online (Sandbox Code Playgroud)
这里生成器函数的目的是取整数(所需数组的大小)并生成所需大小的数组.我个人更喜欢使用方法引用的前一种方法而不是后一种使用lambda表达式的方法.
JMe*_*nik 39
使用 toArray(T [] a)方法:
String[] array = set.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)
小智 5
番石榴风格:
Set<String> myset = myMap.keySet();
FluentIterable.from(mySet).toArray(String.class);
Run Code Online (Sandbox Code Playgroud)
更多信息:https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/FluentIterable.html
| 归档时间: |
|
| 查看次数: |
262455 次 |
| 最近记录: |