2013-12-24 2 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

Первый Fix yourItems переменная ArrayList она должна быть объявлена ​​таким образом:

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

Вторая точка myDrinks является ArrayList Collection, который принимает Drinks объект как параметр, который означает, что вы не можете использовать String toMoveup, чтобы заглянуть внутрь, вместо этого это должно быть Объект:

Drinks toMoveUp=new Drinks("e"); 

И потом:

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

Good Luck

+0

, в котором строка точно указывает на меня, где ошибка –

+0

сбой, когда у меня есть 2 выбранных. Этот массив соответствует представлению списка. Являются ли объекты вида списка статичными после их размещения? – JavaGrassHopper

+0

, когда у вас есть 2 данных? –

-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

Я не хочу удалять другие значения. использование swap переместило бы все остальные значения вниз – 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

Смежные вопросы