如何遍历从对象派生的ArrayList

时间:2017-03-01 14:56:31

标签: java android object arraylist

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通配符等),但我的时间很短。

非常感谢任何和所有帮助!

提前致谢!

4 个答案:

答案 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:...




        }

}