2012-06-27 2 views
0

Я фильтрование весь список, который ahve же лат, долго в одном списке и поместить в тот же список, и поместить этот список в карту Мой код, как: -Зачем удалять элемент карты?

private Collection<List<Applicationdataset>> groupTheList(ArrayList<Applicationdataset> arrayList) 
    { 
    Map<Key, List<Applicationdataset>> map = new HashMap<Key, List<Applicationdataset>>(); 
    for(Applicationdataset appSet: arrayList) 
     { 
     Key key = new Key(appSet.getLatitude(), appSet.getLongitude()); 
     List<Applicationdataset> list = map.get(key); 
     if(list == null){ 
      list = new ArrayList<Applicationdataset>(); 

     } 
     list.add(appSet); 
      map.put(key, list); 
    } 
    return map.values(); 
} 


public class Key { 
    String _lat; 
    String _lon; 

    Key(String lat, String lon) { 
     _lat = lat; 
     _lon = lon; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     Key key = (Key) o; 

     if (!_lat.equals(key._lat)) return false; 
     if (!_lon.equals(key._lon)) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = _lat.hashCode(); 
     result = 31 * result + _lon.hashCode(); 
     return result; 
    } 
} 

Но когда я отладки мой код в соответствии в xml, который поступает из веб-сервиса, есть 2 списка, которые имеют один и тот же lat long, и они сохраняют в том же списке в amp во время отладки, но когда я иду на следующий этап отладки элемента карты, у которого есть 2 списка элементов, уменьшаются и отображаются размер 1 Я не могу исправить эту проблему.

+2

Может быть для других людей, ваш вопрос кажется более разумным, но на данный момент я не совсем уверен, как сделать голову или хвосты того, что вы просите. Не могли бы вы прояснить, что вы пытаетесь сделать в первую очередь? Это также может помочь нам понять, в чем проблема, с которой вы столкнулись. – blahman

+0

На самом деле, мое требование состоит в том, что я хочу сохранить весь список свойств, которые имеют один и тот же lat, длинный в одном списке из xml, который xml поступает из веб-сервиса для того, что я пытался использовать над кодом. – sandee

ответ

1

Ваш код выглядит нормально: вы переопределили equals() и hashCode() последовательно.

Проверить наличие пробелов в LAT/LNG значений в качестве причины ваших проблем, возможно, trim() в конструкторе:

Key(String lat, String lon) { 
    _lat = lat.trim(); 
    _lon = lon.trim(); 
} 

Кроме того, вы можете упростить свой код так:

@Override 
public boolean equals(Object o) { 
    return o instanceof Key 
     && _lat.equals(((Key)o)._lat)) 
     && _lon.equals(((Key)o)._lon)); 
} 

@Override 
public int hashCode() { 
    // String.hashCode() is sufficiently good for this addition to be acceptable 
    return _lat.hashCode() + _lon.hashCode(); 
} 
+0

thanx для вашего ответа Я применяю этот код, а затем принимаю ответ правильно или неправильно. – sandee

0

Это немного сложно понять, чего вы пытаетесь достичь. Но я считаю, что проблема заключается в том, что вы используете как широту, так и долготу в реализации Key hashCode()/equals(), поэтому второй Applicationdataset в вашем списке ввода заменяет первый в вашем объекте карты. Вы должны реализовать случай, когда связанный список уже был помещен в карту и не заменяет его.

+0

Извините за мое объяснение. Но на первом этапе отладки предположим, что первые свойства lat, длинные 2 раза в списке, которые сохраняются в списке правильно, означает, что отображение списка (L1) на карте равно 2, но когда я повторяю следующий шаг, пробег еще 2-3 раза размер arralist (L1) показывает 1 это моя проблема .. – sandee

Смежные вопросы