2013-12-24 94 views
1

我想使用Collections.swap向上和向下移动自定义数组项目,但我不明白如何以某种方式实现它,以便我的应用程序不会崩溃。向上或向下移动自定义数组项目

private List<Drinks> myDrinks = new ArrayList<Drinks>(); 
private ArrayList<String> yourItems; 

...

private void populateDrinkList() { 

     if (yourItems.contains("pie")){ 
     myDrinks.add(new Drinks("a")); 
     myDrinks.add(new Drinks("b")); 
     myDrinks.add(new Drinks("c")); 
     myDrinks.add(new Drinks("d")); 
     myDrinks.add(new Drinks("e")); 

     if (yourItems.contains("chocolate")){ 
      String toMoveUp = "e"; 
      while (myDrinks.indexOf(toMoveUp) != 0) { 
      int i = myDrinks.indexOf(toMoveUp); 
      Collections.swap(myDrinks, i, i - 1); 
    } 
} 
+0

你能有个例子来说,你是怎么想你的代码 –

+0

的输出中输入所以什么问题? –

+0

我想改变数组项的位置。例如,如果我的其他数组包含值巧克力(yourItems),我想要移动,myDrinks值的位置优先。如果你有巧克力,你更有可能制作配方e – JavaGrassHopper

回答

0

首先修复yourItems变量ArrayList应该以这种方式声明:

private ArrayList<String> yourItems=new ArrayList<String>(); 

二点myDrinksArrayList集合了利用Drinks对象作为参数,这意味着你不能使用字符串toMoveup看它里面它应该是一个Drinks对象:

Drinks toMoveUp=new Drinks("e"); 

然后:

while (myDrinks.indexOf(toMoveUp) != 0) { 
      int i = myDrinks.indexOf(toMoveUp); 
      Collections.swap(myDrinks, i, i - 1); 
    } 

好运

+0

其中线条正好指向我,其中错误 –

+0

在我选择了2个时崩溃。这个数组对应于一个列表视图。列表视图对象放置后是否为静态?当您选择2个数据时,您是否有 – JavaGrassHopper

+0

? –

-1

您可以从列表中删除(给你已经有了索引),然后用myDrinks.add(0,<Object>)方法将其添加为第0个元素。该代码会是这样,

 Drinks toMoveUp = new Drinks("e"); 
     int index = myDrinks.indexOf(toMoveUp); 
     myDrinks.remove(index); //remove from where it is now 
     myDrinks.add(0,toMoveUp); //add to the top 
+0

我不想删除其他值。使用交换将移动所有其他值 – JavaGrassHopper

+0

已经有一种方法可以做到这一点。 [Collections.swap](http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#swap(java.util.List,int,int)) –

+0

@VimalBera,Swap会将元素放在顶部到'toMoveUp'的位置,但这只会将'toMoveUp'元素加到 – pulasthi7