Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java SE (J2SE)

Войти
Регистрация
Восстановить пароль
 
 
AlexRu18
5 / 5 / 2
Регистрация: 29.01.2015
Сообщений: 162
#1

Удаление из коллекции - Java SE

21.01.2017, 23:12. Просмотров 385. Ответов 17
Метки нет (Все метки)

Добрый день.
Есть коллекция accounts, из неё нужно убрать один элемент, переданный параметром функции.
Пытаюсь найти индекс элемента и затем удалить его.
Никак не могу поймать индекс у элемента number, что я делаю не так и как проще можно написать данный блок?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void removeAccount(Long number) {
        for (Account account : accounts) {
            System.out.println("У клиента есть счёт №: " + account.number);
            if (accounts.contains("number")) { 
                int index = accounts.indexOf("number");
                System.out.println("Index is: " + index);
                accounts.remove(index);
                System.out.println("Удалён!");
            } else {
                System.out.println("Счёта с номером " + number + " у данного пользователя не существует!");
 
            }
 
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2017, 23:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удаление из коллекции (Java SE):

Удаление из коллекции - Java SE
Драсти! Проблемка такая. Есть два списка. Один стринговый на 50 элементов, а второй инт на 39. Суть вот в чем. В интовом листе содержаться...

Удаление элементов коллекции - Java SE
Привет всем)помогите пожалуйста разобраться почему не работает код: public static void main(String args) { ...

Удаление ключей в коллекции мап - Java SE
Здравствуйте,проблема следующая : создается коллекция Treemap(который уже по дефолту сортирует ключи),т.е. такого плана Map<String,Long>...

Удаление элемента из Set-коллекции - Java SE
Проблема вот в чем, нужно из cats удалить одного "кота" Что я делаю не так? public class Solution { public static void...

Коллекции - Java SE
Посоветуйте пожалуйста статью о коллекциях, именно для новичков, или книгу, где про них подробно и понятно расписано

Коллекции - Java SE
Доброго времени суток. Никак не могу разобраться с коллекциями в java, а именно с map. Задача такая: есть абстрактный класс фигуры, и 4...

17
xoraxax
1196 / 1151 / 273
Регистрация: 05.07.2013
Сообщений: 5,606
Завершенные тесты: 1
21.01.2017, 23:17 #2
https://docs.oracle.com/javase/8/doc...ion.Predicate-
0
AlexRu18
5 / 5 / 2
Регистрация: 29.01.2015
Сообщений: 162
21.01.2017, 23:38  [ТС] #3
к сожалению не смог разобраться как именно нужно это сделать.

Ещё нашёл такой пример
Java
1
2
3
4
5
6
7
8
for (Iterator<Account> iterator = accounts.iterator(); iterator.hasNext(); ) {
            Account str = iterator.next();
            if (str.equals(number)) {
                System.out.println("Checking "+str);
                accounts.remove(str);
            }else {
                System.out.println("Счёта с номером " + number + " у данного пользователя не существует!");}
        }
но тоже, увы, не помогает.
0
xoraxax
1196 / 1151 / 273
Регистрация: 05.07.2013
Сообщений: 5,606
Завершенные тесты: 1
21.01.2017, 23:42 #4
Java
1
2
Collection<MyObject> c = ...;
c.removeIf(o->o.aField==2);
0
AlexRu18
5 / 5 / 2
Регистрация: 29.01.2015
Сообщений: 162
21.01.2017, 23:54  [ТС] #5
А, видимо я ошибся. У меня Лист, не коллекция.

И вот простой пример:
Java
1
2
arrayList.remove(0); // удаляем по индексу
arrayList.remove("number"); // удаляем по объекту
Но я никак не могу его реализовать у себя.
0
xoraxax
1196 / 1151 / 273
Регистрация: 05.07.2013
Сообщений: 5,606
Завершенные тесты: 1
22.01.2017, 00:08 #6
List это Collection.
Цитата Сообщение от AlexRu18 Посмотреть сообщение
Но я никак не могу его реализовать у себя.
что это вообще значит?
0
AlexRu18
5 / 5 / 2
Регистрация: 29.01.2015
Сообщений: 162
22.01.2017, 00:24  [ТС] #7
Мысль понял.

Java
1
2
3
4
5
6
7
8
public ArrayList<Account> accounts = new ArrayList<>();
...
public void removeAccount(Long number) {
for (Account account : accounts) {
            System.out.println("У клиента есть счёт №: " + account.number);
            accounts.removeIf(accounts.account -> account.number== number);
 
...
Но делаю явно что-то неверно.
0
vcrop
206 / 167 / 61
Регистрация: 14.06.2016
Сообщений: 347
22.01.2017, 00:35 #8
А просто
Java
1
2
public void removeAccount(Long number) {
   accounts.removeIf(account -> account.number == number);}
?
0
AlexRu18
5 / 5 / 2
Регистрация: 29.01.2015
Сообщений: 162
22.01.2017, 00:52  [ТС] #9
Нет, пробовал.
Видимо на вот это ругается
Java
1
for (Account account : accounts) {
XML
1
Lambda expression's parameter account cannot redeclare another local variable defined in an enclosing scope.
0
turbanoff
Эксперт Java
4004 / 3739 / 467
Регистрация: 18.05.2010
Сообщений: 9,316
Записей в блоге: 11
Завершенные тесты: 1
24.01.2017, 02:00 #10
AlexRu18, Последний пример выглядит рабочим. По крайней мере ваша ошибка не связана с ним.
Вы что-то не так написали в вашем коде.
0
Chibison
6 / 6 / 1
Регистрация: 16.01.2017
Сообщений: 31
24.01.2017, 02:15 #11
Как я вижу решение
Если у аккаунта есть поле number то оно либо long либо int
Так же как я понимаю, у вас есть колллекция ArrayList с дженериком Account, но не String
поэтому строка if (accounts.contains("number")) немного безсмыслена,
только если не переопределён метод toString()
ну да ладно, вернёмся к изголовью
Есть объект Аккаунт у которого есть поле number с типом int или long
тогда чтобы вытереть чётко по номеру



Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    public void removeAccount(Long number) 
    {
        int i = 0;
        
        for (Account account : accounts) 
        {
            if (account.number == number) 
                accounts.remove(i);
            
            i ++;
 
        }
    }
P.S. Такое ощущение как будто ищем чёрного кота в чёрной комнате, но есть мелкий просвет.
AlexRu18, Вы бы хотя бы приложили свой объект Account к теме, чтобы людям было понятно что у вас там твориться и вам быстрее могли помочь.
0
we2seek
80 / 80 / 17
Регистрация: 25.01.2010
Сообщений: 385
24.01.2017, 02:33 #12
Цитата Сообщение от turbanoff Посмотреть сообщение
Последний пример выглядит рабочим
а мне он не кажется рабочим, т.к. коллеции в потоках иммутабельны... надо проверять в общем

Добавлено через 17 минут
Sorry, посмотрел исходники removeIf - я не прав
Java
1
2
3
4
5
6
7
8
9
10
11
12
default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }
0
AlexRu18
5 / 5 / 2
Регистрация: 29.01.2015
Сообщений: 162
24.01.2017, 11:22  [ТС] #13
Спасибо, но я уже решил проблему.
Проблема была в том, что удаление происходит в цикле, а не после

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void removeAccount(Long number) {
 
        int index = -1;
        for (Account account : accounts) {
            System.out.println("У клиента есть счёт №: " + account.number);
 
            index = accounts.indexOf(account);
            if (!(index == -1)) {
                //System.out.println("Index is: " + index);
 
            } else {
                System.out.println("Счёта с номером " + account.number + " у данного пользователя не существует!");
 
            }
            // accounts.clear(); - Полная очистка коллекциии
        }
        accounts.remove(index);
        System.out.println("Удалён!");
    }
0
vcrop
206 / 167 / 61
Регистрация: 14.06.2016
Сообщений: 347
24.01.2017, 18:18 #14
Chibison, не удаляй так. Получишь только ConcurrentModificationException.
0
Chibison
6 / 6 / 1
Регистрация: 16.01.2017
Сообщений: 31
24.01.2017, 18:29 #15
Цитата Сообщение от vcrop Посмотреть сообщение
ConcurrentModificationException.
Теперь буду иметь ввиду, кстати, хотел узнать, почему она может вылезти в такой момент и как тогда лучше вытирать, ибо порой лезет такая дрянь, но в основном её встречал при вытирании из коллекций Set, HashSet ну и List порой.
0
24.01.2017, 18:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2017, 18:29
Привет! Вот еще темы с ответами:

Коллекции - Java SE
Здравствуйте. Я новичок в изучении java. Нужна помощь Задание: Вклады:сумма,дата,процентная ставка,период,вид вклада 1.Добавить в...

Коллекции - Java SE
Здравствуйте. Бьюсь над задачкой по java. Условие: Напишите класс Student, предоставляющий информацию об имени студента методом...

Коллекции - Java SE
Java Создать коллекцию

Коллекции - Java SE
Создать для класса Автомобиль, имеющего 3 свойства , 3 различных класса , реализующих интерфейс Comparator.В качестве критериев для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru