Смотри: у List есть 2 метода remove:
boolean remove(Object o);
E remove(int index);
Первый удаляет по объекту. Грубо говоря, он ищет в списке передаваемый объект, и если находит - удаляет его.
Второй удаляет по индексу - то есть удаляет объект с индексом index.
Обрати внимание на тип параметра: у первого это Object, у второго - скалярный int.
В ipList.remove(id) ты передаешь переменную типа Integer (который, в свою очередь, наследуется от Object). Таким образом java вызывает первый метод. Он пытается найти этот объект в списке, а его там нет - у тебя же там Ip, и, в итоге, ничего не удаляет.
Тебе надо приводить твой Integer к int ( с помощью id.intValue() или (int) id). Тогда java вызовет второй метод, который удаляет по индексу.
Но! Скорее всего, в запросе ты будешь передавать не индекс, а иммено id класса Ip. Поэтому, на самом деле, решение с ipList.removeIf(i -> i.getId().equals(id)); является самым правильным. Ну, или использовать Map, как сказали выше.