Java和Android的新手......
我正在使用一个类存储一组Google Map LatLng点来迭代。这是我用来将Arraylist分配给Object的类:
public class GeoPoints implements Iterable<String>, Iterator<String> {
private HashMap<String, Object> internalStorage = new HashMap<String, Object>();
private int count = 0;
public void add(String key, Object value) {
internalStorage.put(key, value);
}
public Object get(String key) {
return internalStorage.get(key);
}
@Override
public boolean hasNext() {
if (count < internalStorage.size()) {
return true;
}
return false;
}
@Override
public String next() {
if (count == internalStorage.size()) throw new IndexOutOfBoundsException();
count++;
return (String) internalStorage.keySet().toArray()[count - 1];
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
@Override
public Iterator<String> iterator() {
return this;
}
}
我正在点这样的观点:
geoPoints = new GeoPoints();
// Load GeoPoints ArrayList...
List<LatLng> points = new ArrayList<LatLng>();
points.add(new LatLng(45.778754, -124.811288));
points.add(new LatLng(28.781740, -124.350814));
points.add(new LatLng(48.712660, -60.982386));
points.add(new LatLng(20.354554, -58.794457));
geoPoints.add("US_MAP", points);
要访问我正在使用for循环的对象,如下所示:
for (String key : geoPoints ) {
Object obj = geoPoints.get(key);
}
此时,我可以调试并看到Object obj包含我用上面四点创建的ArrayList。
对于我的生活,我无法弄清楚如何访问这些Arraylist值以迭代或循环这些值。
我已经尝试将obj分配给arraylist迭代器:
ArrayList<?> myTestItr = geoPoints.get(key);
哪个不行,我肯定有明显的理由...... :)
我确信这有一个简单的答案(使用Iterator通配符等),但我的时间很短。
非常感谢任何和所有帮助!
提前致谢!
答案 0 :(得分:1)
您是否尝试按如下方式声明地图:
private HashMap<String, List<LatLng>> internalStorage = new HashMap<String, List<LatLng>>();
这意味着您只能添加List<LatLng>
类型,但您可以轻松地对条目进行迭代。
您还必须编辑两种方法:
public void add(String key, List<LatLng>value) {
internalStorage.put(key, value);
}
public List<LatLng>get(String key) {
return internalStorage.get(key);
}
答案 1 :(得分:0)
尝试以编程方式投射:
ArrayList<?> myTestItr = (ArrayList<?>) geoPoints.get(key);
答案 2 :(得分:0)
您必须将Object类强制转换为ArrayList。
Casting就像将对象转换为支持的类类型一样。
如果不支持,则会抛出java.lang.ClassCastException
ArrayList<?> myTestItr = (ArrayList<?>) geoPoints.get(key);
这可以解决您的问题。
答案 3 :(得分:0)
感谢所有人,这是解决方案和实施:
首先使用List LatLng类型的新类:
public class GeoPoints implements Iterable<String>, Iterator<String> {
private HashMap<String, List<LatLng>> internalStorage = new HashMap<String, List<LatLng>>();
private int count = 0;
public void add(String key, List<LatLng>value) {
internalStorage.put(key, value);
}
public List<LatLng> get(String key) {
return internalStorage.get(key);
}
@Override
public boolean hasNext() {
if (count < internalStorage.size()) {
return true;
}
return false;
}
@Override
public String next() {
if (count == internalStorage.size()) throw new IndexOutOfBoundsException();
count++;
return (String) internalStorage.keySet().toArray()[count - 1];
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
@Override
public Iterator<String> iterator() {
return this;
}
}
添加到对象:
geoPoints = new GeoPoints();
// Load GeoPoints ArrayList...
List<LatLng> points = new ArrayList<LatLng>();
points.add(new LatLng(45.778754, -124.811288));
points.add(new LatLng(28.781740, -124.350814));
points.add(new LatLng(48.712660, -60.982386));
points.add(new LatLng(20.354554, -58.794457));
geoPoints.add("US_MAP", points);
要遍历集合:
for (String key : geoPoints) {
List<LatLng> geoPointsXY = geoPoints.get(key);
Iterator geoPtsItr = geoPointsXY.iterator();
while (geoPtsItr.hasNext()){
LatLng oNxtLatLng = (LatLng) geoPtsItr.next();
double yt = oNxtLatLng.latitude;
double nt = oNxtLatLng.longitude;
// Verify Coords here:...
}
}