我有三个不同的ArrayLists需要组合成一个,但是,它们在堆栈中的顺序很重要并且已指定。我怎样才能更有效地做到这一点?
代码正在做的是将ArrayList添加到完整ArrayList的适当级别(0,1,2),但是有太多重复的代码使得这个方法看起来很糟糕。
最终目标如下 - 我们关心的列与所需的顺序一起传递给我们的函数。然后,根据顺序,我们把它放在适当的位置,其他两列填充其余的(它们的顺序无关紧要)。
所以基本上,Column3被传递,例如,顺序2.这意味着我们希望完整的ArrayList是Column1的内容,然后是Column3的内容,然后是Column2的内容(其中) Column1和Column2可以交换,因为它们的顺序并不重要。)
感谢。
public void assemble(List<Card> selection, int order) {
switch(order) {
case 0:
trickDeck.addAll(selection.stream().collect(Collectors.toList()));
if (selection == column1) {
trickDeck.addAll(column2.stream().collect(Collectors.toList()));
trickDeck.addAll(column3.stream().collect(Collectors.toList()));
}
else if (selection == column2) {
trickDeck.addAll(column1.stream().collect(Collectors.toList()));
trickDeck.addAll(column3.stream().collect(Collectors.toList()));
}
else {
trickDeck.addAll(column1.stream().collect(Collectors.toList()));
trickDeck.addAll(column2.stream().collect(Collectors.toList()));
}
break;
case 1:
if (selection == column1) {
trickDeck.addAll(column2.stream().collect(Collectors.toList()));
trickDeck.addAll(selection.stream().collect(Collectors.toList()));
trickDeck.addAll(column3.stream().collect(Collectors.toList()));
}
else if (selection == column2) {
trickDeck.addAll(column1.stream().collect(Collectors.toList()));
trickDeck.addAll(selection.stream().collect(Collectors.toList()));
trickDeck.addAll(column3.stream().collect(Collectors.toList()));
}
else {
trickDeck.addAll(column1.stream().collect(Collectors.toList()));
trickDeck.addAll(selection.stream().collect(Collectors.toList()));
trickDeck.addAll(column2.stream().collect(Collectors.toList()));
}
break;
case 2:
if (selection == column1) {
trickDeck.addAll(column2.stream().collect(Collectors.toList()));
trickDeck.addAll(column3.stream().collect(Collectors.toList()));
trickDeck.addAll(selection.stream().collect(Collectors.toList()));
}
else if (selection == column2) {
trickDeck.addAll(column1.stream().collect(Collectors.toList()));
trickDeck.addAll(column3.stream().collect(Collectors.toList()));
trickDeck.addAll(selection.stream().collect(Collectors.toList()));
}
else {
trickDeck.addAll(column1.stream().collect(Collectors.toList()));
trickDeck.addAll(column2.stream().collect(Collectors.toList()));
trickDeck.addAll(selection.stream().collect(Collectors.toList()));
}
break;
default:
break;
}
}
答案 0 :(得分:2)
我建议使用列索引而不是传入实际的List
。然后我们可以将列操作为数组。这是一个未经测试的演示:
public void assemble(int selection, int position) {
// create list of columns
List<List<Card>> columns = Arrays.asList(column1, column2, column3);
// if selected column is not located at position, swap:
if (selection != position) {
List<Card> temp = columns.get(position);
columns.set(position, columns.get(selection));
columns.set(selection, temp);
}
// add all columns to trickDeck in order
columns.forEach(trickDeck::addAll);
}