Java 8-如何处理非基本类型的数组?

时间:2018-12-09 20:16:28

标签: java arrays java-8 java-stream

我正在使用Google Maps API,并希望处理搜索结果。结果以非基本类型PlacesSearchResult[]的数组形式返回。

我想使用地点搜索结果数组中的数据构建一个由纬度/经度对表示的LatLng[]位置数组。

这是我使用Java 7的方式:

PlacesSearchResult[] searchResults = placesSearchResponse.results;
int placesCount = searchResults.length;

    LatLng[] locations = new LatLng[placesCount];
    for (int i = 0; i < placesCount; i++) {
        locations[i] = searchResults[i].geometry.location;
    }

我决定在这里尝试使用Java 8,但对如何处理非基本体数组感到困惑。 如果它是原始类型的数组,我将执行以下操作:

int[] a = ...
int[] result = IntStream.range(0, a.length)
.map(i -> a[i])
.toArray();

处理对象数组的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以创建从searchResultsmap的{​​{1}}流,然后按如下所示收集到数组:

LatLng

对于当前的解决方案,问题在于,在转换对象类型而不是原始类型时,应该使用Arrays.stream(searchResults) .map(s -> s.geometry.location) .toArray(LatLng[]::new); 而不是使用IntStream.map,然后通过指定mapToObj方法中数组元素的类型。例如:

toArray