У меня есть список
List<String> myList = Arrays.asList("1234", "1214", "1334");
Мой вклад:
String mInput = "1214"
Как написать компаратор для сравнения всех элементов myList с mInput и, если он равен, переместить его в начало списка
Хм 20к реп и довольно новичок вопрос - что тут творится? Это ЛОВУШКА?
@FedericoklezCulloca .... я могу сортировать с помощью comparator, возможно ли добиться этого, о чем идет речь
Возможный дубликат Сортировка строк, содержащих число в Java




Вам не нужен компаратор, который вы можете использовать:
List<String> myList = new ArrayList<>(Arrays.asList("1234", "1214", "1334"));
String mInput = "1214";
if (myList.contains(mInput)) {
myList.remove(mInput);// remove mInput
myList.add(0, mInput);// add it to to index 0 (top of list)
}
System.out.println(myList);// Input [1214, 1234, 1334]
Обратите внимание, что вы должны использовать new ArrayList<>(Arrays.asList("1234", "1214", "1334")), чтобы понять, почему, вы можете прочитать этот UnsupportedOperationException при попытке удалить из списка, возвращаемого Array.asList
Спасибо, это тоже помогает ... [+1]
Если вам действительно нужен компаратор, вы можете сделать что-то вроде этого (при условии, что mInput не null): myList.sort((String o1, String o2) -> mInput.equals(o1) && !mInput.equals(o2) ? -1 : o1.compareTo(o2));
Это нарушает договор компаратора. если o1 и o2 равны myInput, у вас есть o1 <o2 и o2 <o1.
В этом случае компаратор вернет -1, так в чем проблема?
Как я только что сказал, у вас будут и o1 <o2, и o2 <o1, в зависимости от того, используете ли вы o1.compareTo (o2) или o2.compareTo (o1). Это неверно.
Надеюсь, я исправил это
Вы можете написать свой собственный Comparator:
class BringToFrontComparator<T extends Comparable<T>> implements Comparator<T> {
T front;
public BringToFrontComparator(T front) {
this.front = front;
}
@Override
public int compare(T o1, T o2) {
return o1.equals(front) && !o2.equals(front)
// Front one is always less than anything other than itself.
? -1
// Normal comparison elsewhere.
: o1.compareTo(o2);
}
}
public void test(String[] args) throws Exception {
List<String> myList = Arrays.asList("1234", "1214", "1334");
String mInput = "1334";
Collections.sort(myList, new BringToFrontComparator<>(mInput));
System.out.println(myList);
}
отпечатки
[1334, 1214, 1234]
Компаратор должен просто сравнивать, а не перемещать вещи. Вы уверены, что хотите это сделать?