Проблема заказа элементов списка - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть список предметов и набор пользователей. Пользователи могут переупорядочивать элементы списка. У каждого пользователя свой взгляд на список, он может расположить элементы по-своему. Один элемент может быть размещен в разных местах в списке для разных пользователей. Я должен отслеживать местоположение элемента для пользователей в элементе списка. Пожалуйста, дайте предложение для реализации этого. Размер списка не постоянен. Я использую Java. Мое намерение состоит в том, чтобы я должен был показать список для каждого пользователя в их формате заказа. Пожалуйста, Мастера, дайте мне предложение.

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Почему бы вам сначала не сделать классический объектно-ориентированный дизайн, как это предлагает свечение? Тогда у вас будет класс User и Item. Пользовательский класс будет иметь список экземпляров Item.

class User{
  String userId;
  List<Item> userItems;
}

Обратная структура будет отражаться и в базе данных (таблица пользователя, таблица элементов и таблица элементов пользователя с отображениями внешнего ключа в первые две таблицы) Решение Map of List, предложенное Марком, работает, но не является «правильным» подходом в объектно-ориентированном языке, таком как Java.

1 голос
/ 24 февраля 2011

Вы можете сохранить упорядоченный список, ну, в порядке, чтобы получить элементы из вашего основного списка:

List<Foo> items = new ArrayList<Foo>();
// add stuff to items (say, 6 things)

Map<String,List<Integer>> userOrders = new HashMap<String,List<Integer>>();
userOrders.put("A", Arrays.asList(0,1,2,3,4,5)); // add user A's order
userOrders.put("B", Arrays.asList(5,4,3,2,1,0)); // add user B's order

// display for userA:
for(Integer i : userOrders.get("A")){
    show(items.get(i)); // show the userA's i-th item
}

Здесь я также использую Map для удержания ордеров. В зависимости от вашего приложения вы можете использовать какую-то другую схему для получения пользовательского заказа, но принцип всегда будет таким же: если пользователь может иметь пользовательский заказ, вы должны сохранить этот заказ где-нибудь, а затем переберите список вещей, основанный на этом порядке (как показано выше).

Также позаботьтесь о типе List, который вы используете, вызов get для произвольного доступа на LinkedList значительно дороже, чем на ArrayList.

0 голосов
/ 24 февраля 2011

У вас есть одно место, где хранится фактический список предметов. Затем каждый пользователь получает свою модель данных. Он подкреплен фактическим списком, но модель представляет собой скорее соответствие между фактическими индексами каждого элемента и отображаемым индексом, который пользователь имеет для элемента. Затем у вас есть один зритель, который может использовать модель для отображения списка в графическом интерфейсе. Что касается зрителя, модель сообщает ему правильные индексы. Но модель допускает преобразование из отображаемого заказа в реальный заказ. Когда пользователь манипулирует списком через представление, вы обновляете карту индекса и никогда не касаетесь фактических данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...