【问题标题】:Java 8 - how to process arrays of non-primitive types?Java 8 - 如何处理非原始类型的数组?
【发布时间】:2018-12-09 20:16:28
【问题描述】:

我正在使用 Google 地图 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();

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

【问题讨论】:

    标签: java arrays java-8 java-stream


    【解决方案1】:

    您可以创建一个从searchResultsmapLatLng 的流,然后按如下方式收集到一个数组:

    Arrays.stream(searchResults)
          .map(s -> s.geometry.location)  
          .toArray(LatLng[]::new);  
    

    至于您当前的解决方案,问题在于您应该使用mapToObj 而不是使用IntStream.map,因为您要转换为对象类型而不是原始类型,然后通过指定数组的类型来完成它toArray 方法中的元素。示例:

    IntStream.range(0, searchResults.length)
             .mapToObj(i -> a[i].geometry.location)
             .toArray(LatLng[]::new);
    

    【讨论】:

      猜你喜欢
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2011-09-04
      • 2018-08-09
      • 2018-01-07
      • 2019-05-08
      相关资源
      最近更新 更多