0

我正在过滤在一个列表中具有相同纬度、经度的所有列表并放入同一个列表中并将该列表放入地图我的代码如下:-

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;
    }
}

但是当我根据来自 web 服务的 xml 调试我的代码时,有 2 个具有相同纬度的列表,并且它们在调试时保存在 amp 中的相同列表中,但是当我进行下一步调试时 map 的元素其中有 2 个项目列表减少并显示大小 1 我无法纠正这个问题。

4

2 回答 2

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();
}
于 2012-06-27T06:11:22.073 回答
0

这有点难以理解你想要完成的事情。但我认为问题在于您在 Key hashCode()/equals() 实现中同时使用纬度和经度,这就是为什么输入列表中的第二个 Applicationdataset 替换了地图对象中的第一个。您应该执行相关列表已经放入地图并且不要替换它的情况。

于 2012-06-27T05:39:21.857 回答