Метод класса массива списка, который удаляет элемент и возвращает новый список - PullRequest
0 голосов
/ 02 апреля 2020

Мне нужно написать метод как часть класса списка массивов, который принимает элемент в качестве параметра

Метод удаляет все экземпляры этого элемента и затем возвращает новый список только с этим элементом

public List<E> removeSubList(E element) {
    ArrayList<E> removedList = new ArrayList<E>();
    while(array_list.contains(element)) {
        removedList.add(array_list.remove(array_list.indexOf(element)));}
        return removedList;
    }
}

Это то, что я имею до сих пор ... две вещи:

  1. Будет ли это работать?

И 2. Я продолжаю получать не могу вызвать ( метод) для типа массива Object [], для которого array_list равен

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Обратите внимание, что дубликаты будут хороши, только если equals() и == одинаковы для объекта E.

0 голосов
/ 02 апреля 2020

Во-первых, ваша ошибка cannot invoke (method) on array type Object[] означает, что ваша переменная array_list на самом деле является массивом Object с, как ответил Джони.

Следующий код является методом stati c, который принимает дополнительный параметр ArrayList. Это соответствует вашей переменной array_list.

public static <E> List<E> removeSublist( E elt, ArrayList<E> aList) {
        // first, count the number of occurrences of the element
        int numOccurrences = Collections.frequency(aList, elt);

        // remove all occurrences of elt from your list
        aList.removeIf( currentElt -> currentElt.equals(elt));

        // return a list with numOccurrences duplicates of elt
        return Collections.nCopies(numOccurrences, elt);
    }

Ваш подход l oop тоже будет работать, но более эффективно удалить все вхождения сразу, а затем вернуть список с соответствующим количеством дубликатов elt. Если вы собираетесь использовать подход l oop, вам нужно поместить оператор return вне l oop.

Чтобы сделать этот метод частью пользовательского подкласс ArrayList, просто измените подпись обратно на то, что у вас было изначально. Но убедитесь, что array_list на самом деле имеет тип ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...