Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要删除地图的元素?_Java - Fatal编程技术网

Java 为什么要删除地图的元素?

Java 为什么要删除地图的元素?,java,Java,我正在筛选具有相同lat的所有列表,长在一个列表中,并将其放入同一个列表中,然后将该列表放入地图。我的代码如下:- private Collection<List<Applicationdataset>> groupTheList(ArrayList<Applicationdataset> arrayList) { Map<Key, List<Applicationdataset>> map = new HashMap<

我正在筛选具有相同lat的所有列表,长在一个列表中,并将其放入同一个列表中,然后将该列表放入地图。我的代码如下:-

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;
    }
}
私有集合组列表(ArrayList ArrayList)
{
Map Map=newhashmap();
对于(Applicationdataset appSet:arrayList)
{
Key Key=newkey(appSet.getLatitude(),appSet.getLongitude());
List=map.get(键);
if(list==null){
列表=新的ArrayList();
}
list.add(appSet);
地图。放置(键、列表);
}
返回map.values();
}
公开类密钥{
字符串_lat;
弦;
键(串横向,串纵向){
_lat=lat;
_lon=lon;
}
@凌驾
公共布尔等于(对象o){
如果(this==o)返回true;
如果(o==null | | getClass()!=o.getClass())返回false;
键=(键)o;
如果(!\u lat.equals(key.\u lat))返回false;
如果(!\u lon.equals(key.\u lon))返回false;
返回true;
}
@凌驾
公共int hashCode(){
int result=_lat.hashCode();
result=31*result+_lon.hashCode();
返回结果;
}
}

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

这有点难以解决了解你想要实现的目标。但我认为问题在于,您在键hashCode()/equals()实现中同时使用了纬度和经度,这就是为什么输入列表中的第二个应用程序数据集将替换map对象中的第一个应用程序数据集。当相关列表已经放入map时,您应该实现该情况,而不要替换它。

您的代码看起来正常:您已经一致地覆盖了
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();
}

也许对其他人来说,你的问题似乎更合理,但目前我不完全确定如何理解你的问题。请你先说明你想做什么好吗?这也可能有助于我们了解您遇到的问题。实际上,我的要求是,我希望存储所有具有相同lat的属性列表,长在xml的一个列表中,该xml来自web服务,我尝试了上面的代码。很抱歉我的解释。但在调试的第一步中,假设第一个属性lat,在列表中长时间出现2次,正确保存在列表中意味着在映射中显示列表(L1)的大小为2,但当我迭代下一步时,意味着循环将进一步运行,2-3倍于arralist(L1)的大小显示为1,这是我的问题。。