Вы не можете сделать это с помощью Comparator
.
Но вы можете отсортировать значения и затем переставить значения, то есть многократно перемещать дубликаты в конец списка, как вы сказали.
public static List<Integer> sortAscendingRepeated(Integer... values) {
List<Integer> list = new ArrayList<>(Arrays.asList(values));
Collections.sort(list);
for (int i = 1; i < list.size(); i++)
if (list.get(i).equals(list.get(i - 1)))
list.add(list.remove(i--));
return list;
}
Тест
System.out.println(sortAscendingRepeated(40, 50, 50, 40, 20, 10, 10, 30, 20, 30));
System.out.println(sortAscendingRepeated(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 4));
Выход
[10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3]