Как удалить идущие подряд дубликаты в списке(заменить их 1 вхождением)?

Необходима функция которая из списка чисел создаст новый список, в котором подряд идущие одинаковые числа будут заменены одним вхождением, например: { 2, 11, 11, 11, 2, 3, 2, 2, 6, 6, 2, 3, 3, 3, 10 } → { 2, 11, 2, 3, 2, 6, 2, 3, 10 } Есть функция, которая удаляет вообще все дубликаты. Как её переделать?

   public static List<Integer> createNewList(List<Integer> list) {
        for (int i = list.size() - 1; i > -1; i--)
            if (list.indexOf(list.get(i)) != i) list.remove(i);
        return list;
    }
вывод: { 2, 11, 3, 6, 10 }

Ответы (2 шт):

Автор решения: had0uken

Плохая идея: удалять элементы в листе, по которому вы иттерируетесь. Создайте новый лист (у вас же метод называется "создать новый лист") и добавляйте в него нужные элементы:

 public static List<Integer> createNewList(List<Integer> list) {
        List<Integer> result = new ArrayList<>();
        result.add(list.get(0)); // 0 элемент в любом случае попадает
        for(int i=1;i<list.size();i++)
            if(list.get(i)!=list.get(i-1))result.add(list.get(i));
        //если элемент листа не равен предыдущему - добавляем в 
        //результат, иначе идем дальше
        return result;
    }
→ Ссылка
Автор решения: Gug1n16

Через удаление лишних элементов почти получилось сделать , только нужно дабавить условие на случай, если больше 2 одинаковых символов подряд.

public static List<Integer> createNewList(List<Integer> list) {
        for (int i = 0; i < list.size() - 1; i++){
            if (list.get(i) == list.get(i + 1)){ 
                list.remove(i+1);           
            }
        }
        return list;
    }

Вывод: 2 11 11 2 3 2 6 2 3 3 10

→ Ссылка