Как я могу изменить позицию Объектов в списке, изменив его содержимое вместо его orderNumber (нужен алгоритм)? - PullRequest
0 голосов
/ 30 сентября 2010

Извините, я не мог придумать более точное название, но, надеюсь, мне удастся объяснить проблему здесь. У меня есть объект (DataType), который действует как элемент HTML SELECT, это контейнер для предварительно определенных значений (DataTypeValues). Значения устанавливаются в определенном порядке, и в базе данных первичный ключ состоит из значения DataTypeValues ​​и позиции. Когда отображается на JSP, это выглядит примерно так

1 Первое значение
2 Второе значение
3 Третье значение

и так далее. Теперь у пользователя есть возможность изменить порядок сортировки, выбрав любой элемент, который станет верхним или нижним элементом (также для переключения мест, но я его получил). Теперь, так как числа являются частями первичного ключа, я могу либо добавить новый столбец DisplayOrder (что было бы неприятно, потому что есть хранимые процедуры и другие модификации, которых я бы с удовольствием избежал), либо сделать то, что я сделал для переключения, и это переключение данных, например. как то так

String temporarayValueContainer = firstDataTypeValue.getValue();
firstDataTypeValue.setValue(secondDataTypeValue.getValue());
secondDataTypeValue.setValue(temporarayValueContainer);

Теперь я хотел бы сделать что-то подобное, но я не могу понять алгоритм. Есть идеи?

РЕДАКТИРОВАТЬ: Итак, вот что я попробовал:

public void setDomainPosition(SpisVrijDomene selected, String position, List vrijDomeneList) throws SpisException {
    List sadrzajList = new ArrayList();
    if (position.equals("TOP")) {
                    //I save the selected items as the first item in the list
        sadrzajList.add(selected.getSadrzaj());
                    // I save all the other values, up to the selected value.
        for (int i=1;i<vrijDomeneList.size();i++) {
            SpisVrijDomene currentVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i);
            SpisVrijDomene previousVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i-1);
            sadrzajList.add(previousVrijDomene.getSadrzaj());
            if (currentVrijDomene.equals(selected))
                    break;
        }
    }
    else if (position.equals("BOTTOM")) {
        sadrzajList.add(selected.getSadrzaj());
        for (int i=vrijDomeneList.size()-1;i>0;i--) {
            SpisVrijDomene currentVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i);
            SpisVrijDomene nextVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i-1);
            sadrzajList.add(nextVrijDomene.getSadrzaj());
            if (currentVrijDomene.equals(selected))
                    break;
        }
    }
// Here I set the items new values function and return value
}

Так что это должно работать так:

Start:  
1  First value  
2  Second value  
3  Third value
4  Fourth value
5  Fifth value

Допустим, пользователь выбирает Третье значение как Топ. Что алгоритм должен сделать, это:

 sadrzajList.add("Third value");
 sadrzajList.add("First value");
 sadrzajList.add("Second value");
 break;
 for (int i=0; i<sadrzajList.size; i++)
 vrijDomeneList.getItem(i).setValue(sadrzajList.getValue(i));

1 Ответ

0 голосов
/ 30 сентября 2010

Возможно, вам нужно отсортировать массив по DisplayOrder после любого изменения.Итак, используйте какую-нибудь обертку, в которой будут обнаружены все изменения.Другой вариант: сортировка перед доступом.

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