Существует два следующих списка ввода:
inputA = [
{
name: "A",
age: 20
},
{
name: "B",
age: 30
},
{ name: "C",
age: 25
},
{ name: "D",
age: 28
}
]
inputB = ["D", "B"]
Мой предпочтительный список вывода должен быть следующим:
expectedOutput = [
{
name: "D",
age: 28
},
{
name: "B",
age: 30
},
{ name: "A",
age: 20
},
{ name: "C",
age: 25
}
]
То, что я сделал до сих пор, выглядит следующим образом:
AtomicInteger count = new AtomicInteger();
Collections.sort(inputA, Comparator
.comparing(a ->
if (inputB.indexOf(a.getName()) > -1) {
return -1;
}
else {
return count.incrementAndGet();
})
.thenComparingInt(a -> a.getAge()));
Вывод, который я получаю, выглядит следующим образом
actualOutput = [
{
name: "D",
age: 28
},
{
name: "B",
age: 30
},
{ name: "C",
age: 25
},
{ name: "A",
age: 20
}
]
Проблема в том, что элементы не имеют своего имени в списке inputB
.Там у заказа нет первоначального заказа в inputA
.Для сохранения первоначального заказа { name: "A", age: 20 }
должен предшествовать { name: "C", age: 25 }
Как я могу решить эту проблему, используя стратегию компоновки компаратора?
ОБНОВЛЕНИЕ Логика сортировки такова: если у inputA есть объекты, имена которых совпадают со списком inputB, эти элементы должны располагаться в верхней части inputA, а затем эти элементы должны быть отсортированы повозраст при сохранении исходного порядка других элементов в inputA, которые не присутствуют во inputB
Это не является возможным дубликатом, потому что этот вопрос пытается сравнить два списка, а также отсортировать общие элементы по свойствуобъект из первого списка, оставляя остальные элементы в их первоначальном порядке.