如何通过更改内容而不是orderNumber(需要算法)来更改列表中的对象位置?

时间:2010-09-30 17:17:08

标签: java algorithm sorting

对不起,我想不出一个更精确的标题,但希望我能在这里解释这个问题。我有一个Object(DataType),它的作用类似于HTML SELECT元素,它是预定义值(DataTypeValues)的容器。值按特定顺序设置,在数据库中,主键由DataTypeValues值和Position组成。当在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

假设用户选择第三个值为Top。算法应该做的是:

 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 :(得分:0)

可能需要在任何更改后通过DisplayOrder对数组进行排序。因此,使用一些将检测到所有更改的包装器。 其他变体:访问前排序。