如何删除ListIterator中对象实例的每个前后值

时间:2017-09-11 21:52:35

标签: java listiterator

我一直试图用这些方法做几天。关键是,我有两个方法,一个删除前面的值,另一个删除后续值。

在每个中,我得到一个ListIterator类型的参数和另一个Object类型的参数。我要检查的值的实例是ListIterator中的Object。

例如,当删除前面的值时,我会得到一个列表,例如:

[12, 42, 28, 92, 3, 25, 3, 89]

我应该在每次出现数字3之前删除该元素,使其变为:

[12, 42, 28, 3, 3, 89]

删除后续值时,我会得到一个列表,如:

[12, 42, 28, 92, 3, 25, 3, 89]

我应该在每次出现数字3后删除该元素,使其变为:

[12, 42, 28, 92, 3, 3]

我已经尝试过这样做,但没有成功。这是我目前的代码:

删除前面的内容:

public static void removePreceeding(ListIterator it, Object value) {
    if (it.hasNext()) {
        it.next();
    } else {
        return;
    }
    while (it.hasNext()) {
        if (it.next().equals(value)) {
            it.previous();
            it.remove();

        }
    }
}

删除成功:

public static void removeSucceeding(ListIterator it, Object value) {
    while (it.hasNext()) {
        if (it.next().equals(value)) {
            if (it.hasNext()) {
                it.next();
                it.remove();
            }
        }
    }
}

感谢所有帮助。 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

private static void removePreceeding(ListIterator listIterator, Object value) {
        while (listIterator.hasNext()) {
            if (listIterator.next().equals(value)) {
                if (listIterator.hasPrevious()) {
                    listIterator.previous();// Note that alternating calls to
                                            // next and previous will return the
                                            // same element repeatedly. Hence
                                            // call another previous to move the
                                            // cursor one level backward
                    listIterator.previous();
                    listIterator.remove();
                    listIterator.next(); // Since the cursor was moved back,
                                            // reset it to next element (i.e
                                            // current element which was visited
                                            // previously)
                }
            }
        }
    }

private static void removeSucceeding(ListIterator listIterator, Object value) {
        while (listIterator.hasNext()) {
            if (listIterator.next().equals(value)) {
                if (listIterator.hasNext()) {
                    listIterator.next();
                    listIterator.remove();
                }
            }
        }
    }