gpt4 book ai didi

java - 为什么要删除Map的元素?

转载 作者:行者123 更新时间:2023-12-01 15:19:06 26 4
gpt4 key购买 nike

我正在过滤一个列表中具有相同经纬度的所有列表,并将其放入同一列表中,然后将该列表放入 map 中我的代码如下:-

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 个具有相同经纬度的列表,并且它们在调试时保存在 amp 中的同一列表中,但是当我进行下一步调试时 map 元素有 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();
}

关于java - 为什么要删除Map的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com