Как проверить, что объект не последний и как с ним справиться, если он есть? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть метод, который циклически просматривает Мешок объектов геометрии и получает определенные атрибуты и сравнивает текущий атрибут с предыдущим, если таковой имеется, с намерением сохранить самый высокий атрибут, а затем назначить его другой геометрии.

Я только что понял, что в какой-то момент я доберусь до конца этой сумки, и мне нужен мой метод, чтобы предупредить меня, что она достигла последнего объекта в сумке.

Какя могу определить, что текущий объект является последним в сумке?

int getLargestUnassignedWard() {
        Bag lsoaGeoms = centroidsLayer.getGeometries();

        System.out.println();
        System.out.println("Getting Largest Unassigned Wards!");

        int highestOSVI = -1;
        MasonGeometry myCopy = null;

        for (Object o : lsoaGeoms) {
            MasonGeometry masonGeometry = (MasonGeometry) o;
            int id = masonGeometry.getIntegerAttribute("ID");
            String lsoaID = masonGeometry.getStringAttribute("LSOA_NAME");
            int tempOSVI = masonGeometry.getIntegerAttribute("L_GL_OSVI_");
            Point highestWard = masonGeometry.geometry.getCentroid();
            System.out.println(lsoaID + " - OSVI rating: " + tempOSVI + ", ID: " + id);
            if (assignedWards.contains(id))
                continue;

            // tempOSVI = the attribute in the "L_GL_OSVI_" column - ints
            if (tempOSVI > highestOSVI) { // if temp is higher than highest
                highestOSVI = tempOSVI; // update highest to temp
                myCopy = masonGeometry; // update myCopy, which is a POLYGON
            }
        }

        if (myCopy == null) {
            System.out.println("ALERT: LSOA Baselayer is null!");
            return -1; // no ID to find if myCopy is null, so just return a fake value
        }

        int id = myCopy.getIntegerAttribute("ID"); // Here, id changes to the highestOSVI
        assignedWards.add(id); // add ID to the "assignedWards" ArrayList
        System.out.println("Highest OSVI Raiting is: " + myCopy.getIntegerAttribute("L_GL_OSVI_") + " for LSOA ID: "
                + id + " (" + myCopy.getStringAttribute("LSOA_NAME") + ")");
        System.out.println("Current list of Largest Unassigned Wards: " + assignedWards); // Prints out: the ID for the highestOSVI
        System.out.println();
        return myCopy.getIntegerAttribute("ROAD_ID"); // return Road_ID for the chosen LSOA to visit
    }

1 Ответ

0 голосов
/ 17 декабря 2018

Я только что понял, что в какой-то момент я достигну конца этой сумки, и мне нужен мой метод, чтобы предупредить меня, что он достиг последнего объекта в сумке.

Я не вижу причин, по которым вам нужно знать, что для выполнения того, что вы сказали, что делает цикл.

Но если вам нужно знать это внутри цикла, вы не можете использоватьулучшенная for петля;вам нужно будет использовать итератор напрямую:

for (Iterator it = lsoaGeoms.iterator(); it.hasNext(); ) {
    MasonGeometry masonGeometry = (MasonGeometry)it.next();
    boolean isLast = !it.hasNext();
    // ...
}

Примечание: я настоятельно рекомендую использовать параметры типа, а не необработанные типы и типы типов.Например, lsoaGeoms будет Bag<MasonGeometry> и т. Д.

...