Удалить нечетные элементы из ArrayList

Вопрос:public static List removeOddNumbers(ArrayList list) { if (list.isEmpty()) { throw new Error(); } List toRemove = new ArrayList(); for (int i : list) { if (i % 2 != 0) { toRemove.add(i); } } list.removeAll(toRemove); return list; } Я пытаюсь удалить все нечетные элементы из ArrayList, а затем возвратить этот массив ArrayList. Я получаю ошибку,

Вопрос:public static List<Integer> removeOddNumbers(ArrayList<Integer> list) { if (list.isEmpty()) { throw new Error(); } List<Integer> toRemove = new ArrayList<>(); for (int i : list) { if (i % 2 != 0) { toRemove.add(i); } } list.removeAll(toRemove); return list; }

Я пытаюсь удалить все нечетные элементы из ArrayList, а затем возвратить этот массив ArrayList.

Я получаю ошибку, указывающую на List Integer в этой первой строке

Контрольная работа:

ArrayList<Integer> arrayList = new ArrayList<Integer>(); Collections.addAll(arrayList, 3, 5, 6, 24, 7, 9, 1, 8, 28, 11); ArrayList<Integer> result = removeOddNumbers(arrayList); System.out.println(result);

Результат:

[6, 24, 8, 28] Лучший ответ:

Если вы используете Java 8, вы можете просто использовать Collection :: removeIf:

list.removeIf(i -> i % 2 != 0);

Полный метод должен выглядеть следующим образом:

public static List<Integer> removeOddNumbers(List<Integer> list) { list.removeIf(i -> i % 2 != 0); return list; }

пример

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 6, 5, 4)); list.removeIf(i -> i % 2 != 0); System.out.println(removeOddNumbers(list));

Выходы

[2, 6, 4] Ответ №1

Вы должны пойти для Iterator, чтобы удалить элементы из списка. Это позволит сэкономить использование временного списка, в котором вы храните нечетные элементы.

public static List<Integer> removeOddNumbers(List<Integer> arrayList) { Iterator<Integer> itr = arrayList .iterator(); while (itr.hasNext()) { int x = (Integer)itr.next(); if (x % 2 != 0) { itr.remove(); } } return arrayList; }

ИЛИ

Вы можете использовать намного более простой код с Java8.

Ответ №2

лямбда-путь:

public static List<Integer> filter(List<Integer> numberList) { return numberList.stream() .filter(number -> number % 2 != 0) .collect(Collectors.toList()); }

Вы должны вызвать этот метод следующим образом:

List<Integer> list = Arrays.asList(3, 5, 6, 24, 7, 9, 1, 8, 28, 11); List<Integer> result = removeOddNumbers(numbers); System.out.println(result);

Проблема заключается в том, что возвращаемый тип метода – List<Integer> но ваш код ожидает, что ArrayList – это просто использовать общий List классов или если вы хотите использовать свой код, он должен выглядеть следующим образом:

ArrayList<Integer> arrayList = new ArrayList<Integer>(); Collections.addAll(arrayList, 3, 5, 6, 24, 7, 9, 1, 8, 28, 11); List<Integer> result = removeOddNumbers(arrayList); System.out.println(result);

NB Метод, отправленный @YCF_L, редактирует список, который вы передаете по параметру, мой метод вместо этого создает новый список, оставляя исходный список нетронутым

Ответ №3// you can use Iterator.remove() List arr = new ArrayList(); arr .add(10); arr .add(20); arr .add(30); arr .add(1); arr .add(2); // Remove odd elements // Iterator.remove() Iterator itr = arr .iterator(); while (itr.hasNext()) { int x = (Integer)itr.next(); if (x % 2 != 0) itr.remove(); } System.out.println(«Modified ArrayList : » + arr);

Оцените статью
Добавить комментарий