Java 如何检查对象是否为';如果是最后一个,如何处理?

Java 如何检查对象是否为';如果是最后一个,如何处理?,java,bag,Java,Bag,我有一个方法,它循环遍历一包几何体对象,获取特定属性,并将当前属性与前一个属性(如果有)进行比较,目的是存储最高属性,然后将其分配给另一个几何体 我刚刚意识到,在某个时刻,我将到达袋子的末端,我需要我的方法来提醒我,它已经到达袋子中的最后一个物体 如何确定当前对象是包中的最后一个对象 int getLargestUnassignedWard() { Bag lsoaGeoms = centroidsLayer.getGeometries(); System.ou

我有一个方法,它循环遍历一包几何体对象,获取特定属性,并将当前属性与前一个属性(如果有)进行比较,目的是存储最高属性,然后将其分配给另一个几何体

我刚刚意识到,在某个时刻,我将到达袋子的末端,我需要我的方法来提醒我,它已经到达袋子中的最后一个物体

如何确定当前对象是包中的最后一个对象

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
    }
我刚刚意识到,在某个时刻,我将到达袋子的末端,我需要我的方法来提醒我,它已经到达袋子中的最后一个物体

我看不出有任何理由你需要知道,去做你说过的那个循环

但是如果您确实需要知道,在循环中,您不能使用增强的
for
循环;您需要直接使用迭代器:

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

旁注:我强烈建议使用类型参数,而不是原始类型和类型转换。例如,
lsoaGeoms
将是一个
,等等

我刚刚意识到,在某个时刻,我将到达袋子的末端,我需要我的方法来提醒我,它已经到达袋子中的最后一个物体

我看不出有任何理由你需要知道,去做你说过的那个循环

但是如果您确实需要知道,在循环中,您不能使用增强的
for
循环;您需要直接使用迭代器:

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


旁注:我强烈建议使用类型参数,而不是原始类型和类型转换。例如,
lsoaGeoms
将是一个
Bag
,等等。

为什么您需要知道最后一个对象是哪个?迭代器有一个
hasNext()
方法如果您直接使用Bag的迭代器,而不是
循环的语法糖
,您将能够测试
hasNext()
在循环中,您可以随意多次使用。不管怎样,为什么您使用原始类型而不是
?包通常是无序的(并且您没有提供有关包的定义或实现方式的详细信息)。从这个意义上说,“last”元素是依赖于实现的,不应该依赖于它-它可能会随着执行而变化,即使包中的项目相同。为什么您需要知道最后一个对象是谁?迭代器有一个
hasNext()
方法如果您直接使用包的迭代器,您可以在循环中任意多次测试
hasNext()
,而不是使用
for
循环的语法sugar
。无论如何,为什么要使用原始类型而不是
Bag
?包通常是无序的(并且您没有提供有关包的定义或实现方式的详细信息)。从这个意义上说,“最后一个”元素依赖于实现,不应该依赖于它——它可能会随着执行的不同而变化,即使包中有相同的项目。