Java Как удалить список объектов объектного типа с условием

#java #arraylist

#java #arraylist

Вопрос:

У меня есть ArrayList ArrayList<Item> . Я хочу удалить item2 from rack1 . Но я застрял здесь. Как я могу удалить объектный тип ArrayList с условием?

Ожидаемый результат будет [rack1,item1,1, rack1,item3,3, rack2,item2,12, rack3,item1,15, rack3,item1,15]

 import java.util.*;
public class Main
{
    public static class Item{
        private String rackNumber, itemNumber;
        private int i;
        
        Item(String rackNumber, String itemNumber, int i){
            this.rackNumber = rackNumber;
            this.itemNumber = itemNumber;
            this.i = i;
        }
        public String getRackNumber(){return rackNumber;}
        public String getItemNumber(){return itemNumber;}
        public int getI(){return i;}
        @Override
        public String toString(){
            return getRackNumber() "," getItemNumber() "," getI();
        }
    }
    public static void main(String[] args) {
        Item item1, item2, item3;
        item1 = new Item("rack1", "item1", 1);
        item2 = new Item("rack2", "item2", 12);
        item3 = new Item("rack3", "item1", 15);
        String ss = "sad";
        ArrayList<Item> arrayItem = new ArrayList<>();
        arrayItem.add(item1);
        arrayItem.add(new Item("rack1","item2", 2));
        arrayItem.add(new Item("rack1", "item3", 3));
        arrayItem.add(item2);
        arrayItem.add(item3);
        arrayItem.add(item3);
       
        System.out.println(arrayItem);
        
        for(Iterator<Item> iterator = arrayItem.iterator(); iterator.hasNext(); ) {
            //Delete rack1 item2
        }
        System.out.println(arrayItem);
    }
}
  

Комментарии:

1. Вы проверяете внутри итерации цикла, соответствует ли элемент, который вы получаете iterator.next() , вашим критериям, и если это так, вы просто вызываете iterator.remove()

2. Получил решение от @Oktay. Но я не понимаю, почему этот пост был отклонен в сторону понижения.

Ответ №1:

Просто добавьте приведенные ниже коды в свой цикл for:

 Item item = iterator.next();
if ("rack1".equals(item.getRackNumber()) amp;amp; "item2".equals(item.getItemNumber()) {
    iterator.remove();
}
  

Ответ №2:

вызовите remove метод, он возвращает логическое значение