Loading...
v.krastev avatar v.krastev 54 Точки

Премахване на елемент от колекция

Колеги, здравейте!

Нов съм в Java и имам някои нелепи затруднения, като горе-посочения проблем, например.

Инициализирам и пълня един лист

List<String> allVehicles = Arrays.asList(console.nextLine().split("\\s+"));

в последствие имам отделен String vehicle, като се предполага, че този стринг може да съществува като елемент на горния лист (по принцип става дума за Vehicle park) и, ако е част от листа, искам да го махна. пробвах най-логичното за мен нещо:

if(allVehicles.contains(vehicle)){
                allVehicles.remove(vehicle);
            }

грешка не при компилация, а при изпълнение (?)

пробвах и 

if(allVehicles.contains(vehicle)){
                allVehicles.remove(allVehicles.indexOf(vehicle));
            }

отново грешка при изпълнение.

в Библията (StackOverflow) навсякъде се дават примери с итератори, следователно пробвах 

while(iterator.hasNext()){
                if(iterator.next().equals(vehicle)){
                    iterator.remove();
                    break;
                }
            }

все грешки при изпълнение.

пробвах колекцията да не е лист, а да е масив. е там пък няма remove метод. :Д

някой съвет, насока какво и къде бъркам? гледам повечето вече сте я решили тази задача. не знам дали така, но ще съм благодарен на някой java-р да даде предложение.

Благодаря предварително!

Тагове:
0
Java Advanced
AntonPortenov avatar AntonPortenov 102 Точки
Best Answer

Сам си си създал проблемите още като четеш входа от конзолата. Когато казваш List.. = Arrays.asList ти не създаваш нов лист а правиш лист, който сочи към Array. В Array няма метод remove. Array е със зададен размер и не може да го увеличаваш или намаляш . Можеш да кажеш allVehicle[1] = null , но array пак ще си е  със същия размер. 

Най-елементарното решение правиш си нов лист. минаваш през allVehicle с един forloop и слагаш всичко в новия. Тогава вече можеш да кажеш newloop.remove(vehicle);

Второ решение:

List<String> allVehicles = new ArrayList<>(Arrays.asList(.....));

 

Виждаш ли как една думичка NEW чупи връзката между 2 та обекта.

 

успех с програмирането.

1
22/09/2017 21:24:38
v.krastev avatar v.krastev 54 Точки

Благодаря!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.