简体   繁体   English

通过 stream 和 map 从 GPX object 获取所有 wayPoints

[英]Getting all wayPoints from a GPX object by stream and map

I'm attempting to use com.github.ticofab:android-gpx-parser:2.2.0 in my project.我正在尝试在我的项目中使用 com.github.ticofab:android-gpx-parser:2.2.0。

Migrating from 'io.j.netics:jpx:2.2.0'.从“io.j.netics:jpx:2.2.0”迁移。 I actually got it working in android. But later(after putting it in production) found that some GPX files will try requesting an unavailable dependency, crashing the app.我实际上是在 android 上运行的。但后来(在将其投入生产后)发现某些 GPX 文件会尝试请求不可用的依赖项,从而导致应用程序崩溃。

This snippet of code I was using with JPX.我在 JPX 中使用的这段代码。 But I'm having a hard time switching it over android-gpx-parser.但是我很难将它切换到 android-gpx-parser。

import com.google.android.gms.maps.model.LatLng;

public ArrayList<LatLng> getWaypointLatLngs (GPX gpx) {
        ArrayList<LatLng> latLngPoints = new ArrayList<>();
        gpx.tracks()
            .flatMap(Track::segments)
            .flatMap(TrackSegment::points)
            .forEach(w -> latLngPoints.add(
                 new LatLng( w.getLatitude().doubleValue(), w.getLongitude().doubleValue())));
        return latLngPoints;
    }

Here's what I'm trying to do with android-gpx-parser.下面是我试图用 android-gpx-parser 做的事情。

public ArrayList<LatLng> getWaypointLatLngs (Gpx gpx) {
    ArrayList<LatLng> latLngPoints = new ArrayList<>();
    gpx.getTracks().stream().flatMap(Track::getTrackSegments)
            .flatMap(TrackSegment::getTrackPoints)
            .forEach(w -> latLngPoints.add(
                new LatLng( w.getLatitude().doubleValue(), w.getLongitude().doubleValue())));
    return latLngPoints;
}

The IDE is tell me I'm declaring a method reference and it is expecting a Function (with map or flatMap). IDE 告诉我,我正在声明一个方法引用,它需要一个 Function(带有 map 或 flatMap)。

在此处输入图像描述

Is there an elegant way of getting all waypoints (points) with from a Gpx object using android-gpx-parser?是否有一种使用 android-gpx-parser 从 Gpx object 获取所有航路点(点)的优雅方法?

Figured it out.弄清楚了。 Here's my solution.这是我的解决方案。

public ArrayList<LatLng> getWaypointLatLngs (Gpx gpx) {

    ArrayList<LatLng> latLngPoints = new ArrayList<>();

     gpx.getTracks().stream().flatMap(track -> track.getTrackSegments().stream())
            .flatMap(trackPoints -> trackPoints.getTrackPoints().stream())
            .forEach(w -> latLngPoints.add(new LatLng(w.getLatitude(), w.getLongitude())));

    return latLngPoints;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM