Есть LinkedList<ClassXXX>
, ClassXXX
содержит множество полей, одно из которых Integer Id
.
Есть ArrayList<Integer>
, который содержит Id
от ClassXXX
.
Нужно отсортировать элементы LinkedList
в той же самой последовательности, как они расположены в ArrayList
. Если в ArrayList
нет Id
, которое есть в первом списке, то такие элементы располагаются в конце LinkedList
. Также Id
может быть во втором списке, но не быть в первом. Сортируется исключительно первый список LinkedList<ClassXXX>
.
Подскажите, в какую сторону смотреть, чтобы это реализовать.
Можно завести HashMap<Integer, ClassXXX>
, в которой ключами будут id
, а значениями — экземпляры ClassXXX
, с таким id
. Далее, заводим новый LinkedList<ClassXXX>
, проходимся по ArrayList<Integer>
(список айдишек), получаем из HashMap
экземпляр класса ClassXXX
, с таким id
и добавляем его в новый LinkedList<ClassXXX>
.
Осталось добавить в конец нового LinkedList<ClassXXX>
элементы, id
которых не нашлись в ArrayList<Integer>
. Можно сделать это так: при проходе по списку айдишек удалять из HashMap
записи, а в конце добавить все значения из HashMap
в конец нового LinkedList<ClassXXX>
.
class Main {
static class Item {
int id;
Item(int id) {
this.id = id;
}
}
public static void main(String[] args) {
// пример входных данных
ArrayList<Integer> ids = new ArrayList(Arrays.asList(4, 2, 1));
LinkedList<Item> items = new LinkedList<>(Arrays.asList(
new Item(1),
new Item(2),
new Item(3)
));
// добавляем каждый item в Map
HashMap<Integer, Item> idsToItems = new HashMap<>();
for (Item item : items) {
idsToItems.put(item.id, item);
}
LinkedList<Item> itemsSorted = new LinkedList<>();
for (Integer id : ids) {
if (idsToItems.containsKey(id)) {
Item item = idsToItems.get(id);
itemsSorted.add(item);
idsToItems.remove(id);
}
}
for (Item item : idsToItems.values()) {
itemsSorted.add(item);
}
for (Item item : itemsSorted) {
System.out.println(item.id);
}
}
}
Ideone
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На вопрос удаление каждого К-того элемента из arraylist по кругу был предложен ответ:
Есть массив из 4 элементовДелаю пузырькову сортировку но последний шаг он не делает
Возник вопрос: Как удалить одинаковые буквы из строки? Есть вот это: