【问题标题】:How to compare 2 different List<LatLng>?如何比较 2 个不同的 List<LatLng>?
【发布时间】:2019-03-24 19:18:50
【问题描述】:

我在一个 List ArrayList 中有交通信号的纬度和经度。接下来,我在第二个 ListArrayList 中有从源到目的地的所有纬度和经度。如何比较一个和第二个列表并只取匹配的纬度和经度

不,我坚持下去。我不知道如何解决这个问题。

    import com.google.android.gms.maps.model.LatLng;
    import java.util.List;
    public class Paters {
        public List<LatLng> points;
    }


    List<Paters> pather = new ArrayList<Paters>();
    pathss.points = 
    decodePolyLine(overview_polylineJson.getString("points"));
    pather.add(pathss);
    listener.onLocationsgetted(pather);
![pather holding these values][1]
https://imgur.com/70RZjht

     public  void onLocationsgetted(List<Paters> pather) {
         List<LatLng> list2 = new ArrayList<LatLng>();`
//these are the traffic signal latitude and longitude
        `list2.add(new LatLng(13.23907, 80.04534));
         list2.add(new LatLng(13.05674, 80.23662));
         list2.add(new LatLng(13.04353, 80.23627));
         list2.add(new LatLng(13.01215, 80.23654));
         list2.add(new LatLng(13.01715, 80.24235));
         list2.add(new LatLng(13.03366, 80.97431));
     }

我希望只获得所有匹配的纬度和经度。

【问题讨论】:

  • 您正在搜索这些组的交集。查看Collection.retainAll 根据另一个集合过滤一个集合
  • 它只在android studio中返回true或false

标签: java google-maps arraylist coordinates


【解决方案1】:
for(Paters p : pather) { p.points.retainAll(list2); }

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
  • 代码是不言自明的,它只有 1 行带有一个 for 循环和一个 retainAll 调用。为什么我需要提供一些额外的文字来解释显而易见的事情?这没有任何意义。
【解决方案2】:

我没试过,但看看它是否有效:

for(LatLng latlng: list1) {
    if(list2.contains((LatLng) latlng) {
        list3.add(latlng);
    }
}

如果您可以使用 Commons Collections,请务必使用:

CollectionUtils.intersection(list2, list1);

顺便说一句,它返回一个集合!

【讨论】:

    【解决方案3】:
    ArrayList<Paters> al = new ArrayList<>();    
    pathss.points =decodePolyLine(overview_polylineJson.getString("points"));
    al.add(pathss);
    
    public  void onLocationsgetted(Paters pathss){
    List<LatLng> list2 = new ArrayList<LatLng>();
    List<LatLng> list3 = new ArrayList<LatLng>();
    list2.add(new LatLng(13.23907, 80.04534));
    list2.add(new LatLng(13.05674, 80.23662));
    list2.add(new LatLng(13.04353, 80.23627));
    list2.add(new LatLng(13.01215, 80.23654));
    list2.add(new LatLng(13.01715, 80.24235));`
    
    for(LatLng p : pathss.points){
        if(list2.contains(p)){
        list3.add(p);
        }
       }
    

    【讨论】:

    • 感谢朋友的建议,我试过了……非常感谢朋友
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多