【问题标题】:List contains is not working列表包含不起作用
【发布时间】:2016-05-31 02:22:02
【问题描述】:

我试图找出用户在 Google 地图上推送了哪条折线。但是我下面的代码没有返回我所期望的:

String k999 = "lat/lng";

List Klick = polyline.getPoints();

System.out.println("The list contains one " + Klick.contains(k999));
System.out.println("The list contains two " + Klick.contains("52.3524921"));
System.out.println("The list contains three " + "[lat/lng:".contains("[lat/lng:"));
System.out.println("Str-Str: " + Klick.contains(Klick));
System.out.println("equals: " + Klick.equals(Klick));
System.out.println("List: " + Klick);

输出:

The list contains one false
The list contains two false
The list contains three true
Str-Str: false
equals: true
List: [lat/lng: (52.3524987,7.709607499999999), lat/lng: (52.3524921,7.7098328).........

为什么我的contains 代码不起作用?

【问题讨论】:

  • polyline是什么类型的对象?
  • 顺便说一句,"[lat/lng:".contains("[lat/lng:)" 将始终返回 true。您正在检查字符串是否包含自身,而不是您的列表

标签: android list contains


【解决方案1】:

您的 Klick List 对象实际上是 LatLng 对象的列表: https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polyline.html#getPoints()

https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLng.html#toString()

当您使用 System.out.println(Klick) 时,实际上是在对每个 LatLng 对象调用 toString() 方法。如果查看 LatLng 类,您可以看到 toString 方法如下所示:

public String toString() {
    return "lat/lng: (" + this.latitude + "," + this.longitude + ")";
}

当您对 List 执行 .contains() 操作时,每个对象都会调用其 .equals() 方法。对于 LatLng,该方法是:

public boolean equals(Object o) {
    if(this == o) {
        return true;
    } else if(!(o instanceof LatLng)) {
        return false;
    } else {
        LatLng var2 = (LatLng)o;
        return Double.doubleToLongBits(this.latitude) == Double.doubleToLongBits(var2.latitude) && Double.doubleToLongBits(this.longitude) == Double.doubleToLongBits(var2.longitude);
    }
}

所以,如果你想弄清楚你的折线有什么 LatLng,你可以这样做:

for(int i = 0, size = Klist.size(); i < size; i++) {
    LatLng currentLatLng = (LatLng)Klist.get(i);
    // do something with your LatLng
    double latitude = currentLatLng.latitude;
    double longitude = currentLatLng.longitude;
    System.out.printf("Latitude is %f. Longitude is %f", latitude, longitude);
}

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    是的,经过数小时的编码,它运行了 ;-) 非常感谢你!

    List Klick = polyline.getPoints();
    
    for(int i = 0, size = Klick.size(); i < size; i++) {
        LatLng currentLatLng = (LatLng) Klick.get(i);
        String KL = Klick.toString();
    
        // do something with your LatLng
        double latitude1 = currentLatLng.latitude;
        double longitude1 = currentLatLng.longitude;
        System.out.printf("\nLatitude: "+KL);
        System.out.printf("\ncontains: "+KL.contains("52.3524987"));
    

    输出:

    Latitude: [lat/lng: (52.3524987,7.709607499999999), lat/lng: (52.3524921,7.7098328), lat/lng: (52.3534915,7.710031300000001).......
    contains: true
    

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 2021-04-22
      • 2014-01-04
      • 1970-01-01
      • 2018-06-23
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多