Java 如何通过更改对象的内容而不是其订单号来更改对象在列表中的位置(需要算法)?
很抱歉,我想不出更准确的标题,但希望我能在这里解释这个问题。我有一个对象(DataType),它的行为类似于HTML选择元素,它是预定义值(DataTypeValues)的容器。这些值按特定顺序设置,在数据库中,主键由DataTypeValues值和位置组成。当显示在JSP上时,它看起来像这样Java 如何通过更改对象的内容而不是其订单号来更改对象在列表中的位置(需要算法)?,java,algorithm,sorting,Java,Algorithm,Sorting,很抱歉,我想不出更准确的标题,但希望我能在这里解释这个问题。我有一个对象(DataType),它的行为类似于HTML选择元素,它是预定义值(DataTypeValues)的容器。这些值按特定顺序设置,在数据库中,主键由DataTypeValues值和位置组成。当显示在JSP上时,它看起来像这样 String temporarayValueContainer = firstDataTypeValue.getValue(); firstDataTypeValue.setValue(secondDat
String temporarayValueContainer = firstDataTypeValue.getValue();
firstDataTypeValue.setValue(secondDataTypeValue.getValue());
secondDataTypeValue.setValue(temporarayValueContainer);
1第一个值2秒值
3第三值 等等。现在,用户可以选择任何元素作为顶部或底部元素(也可以切换位置,但我得到了那个元素),从而重新排列排序顺序。现在,由于数字是主键的一部分,我可以添加一个新的列显示顺序(这将是一个麻烦,因为我很乐意避免存储过程和其他修改),或者做我所做的切换,即切换数据,例如
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
}
假设用户选择第三个值作为顶部。算法应该做的是:
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));
sadrzajList.add(“第三个值”);
添加(“第一个值”);
添加(“第二个值”);
打破
对于(inti=0;i可能,您需要在任何更改后按DisplayOrder对数组进行排序。因此,使用一些将检测所有更改的包装器。
其他变量:访问前排序。Hmm,不确定是我误解了你还是你误解了我:)我需要的是一个具体的算法,例如,我在方法中,我有DataTypeValues列表,我知道选择了哪个项,我知道它需要在顶部还是底部。问题是怎么做?:)@安德烈:嗯。。让我们再试一次)您需要交换到值,但您不知道如何实现方法“set/getValue”。不,我需要一个算法。我的间接切换的例子是一个算法,现在我需要一个算法;它应该是独立于语言的,我可以将伪代码翻译成java。我将把我的尝试发布到tommorow。只是重申一下:您的数据库表有一个主键,它由下拉菜单中的顺序号和(部分)值本身组成。现在你想更改订单号,但避免重新编制索引?我想要的不是切换作为PK一部分的订单号,而是切换内容。