Java 8 - как обрабатывать массивы не примитивных типов? - PullRequest
0 голосов
/ 09 декабря 2018

Я использую API карт Google и хочу обработать результаты поиска.Результат возвращается в виде массива непримитивных типов 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 голосов
/ 09 декабря 2018

Вы можете создать поток из searchResults, map его в LatLng и затем собрать в массив следующим образом:

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

Что касается вашего текущего решения, проблемаэто означает, что вместо использования IntStream.map вы должны использовать mapToObj, поскольку вы переходите к типам объектов, а не к примитивным типам, а затем заканчиваете указанием типа элементов массива в методе toArray.пример:

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