Есть 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
Сборка персонального компьютера от Artline: умный выбор для современных пользователей