Удаление данных из массива, в чем подвох?
Смотри: у 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, как сказали выше.
Судя по всему, Вы пытаетесь удалить данные из массива по идентификатору (присвоенному вами).
Так вот, ipList.remove(2); - здесь (да и везде в массивах на java) двойка (или любая цифра) - это индекс, т.е. номер записи которую и нужно удалить.
Опять же, если я правильно понял, чего Вы хотите добиться, то Вам нужно использовать map, а не array.