【问题标题】:Move a custom array item up or down向上或向下移动自定义数组项
【发布时间】:2014-01-12 08:10:14
【问题描述】:

我想使用 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);
    }
}

【问题讨论】:

  • 您能否举例说明您希望代码的输出和输入方式
  • 那是什么问题?
  • 我想改变数组项的位置。例如,如果我的其他数组包含值 Chocolate(yourItems),我想移动 myDrinks 值的位置以优先考虑。如果你有巧克力,你更有可能制作食谱 e
  • 这应该可以正常工作。您遇到了什么错误?
  • 它不起作用,因为 List 类型是自定义而不是 String

标签: java android arrays sorting


【解决方案1】:

您可以将其从列表中删除(给出您已经获得的索引),然后使用myDrinks.add(0,&lt;Object&gt;) 方法将其添加为第 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

【讨论】:

  • 我不想删除其他值。使用交换会向下移动所有其他值
  • 已经有一种方法可以做到这一点。 [Collections.swap](docs.oracle.com/javase/7/docs/api/java/util/…, int, int))
  • @VimalBera,Swap 会将顶部的元素带到 toMoveUp 所在的位置,但这只会使 toMoveUp 元素向上
  • @user3127974,编辑答案更清楚。删除的项目会重新添加到顶部。
【解决方案2】:

First Fix yourItems variable ArrayList 应该这样声明:

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

第二点myDrinks 是一个ArrayList 集合,它以Drinks 对象为参数,这意味着您不能使用String toMoveup 来查看它,而应该是Drinks 对象:

Drinks toMoveUp=new Drinks("e");

然后:

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

祝你好运

【讨论】:

  • 当我选择 2 时它会崩溃。这个 Array 对应一个列表视图。列表视图对象在放置后是静态的吗?
  • 当您选择了 2 个数据时?
  • 当你选择多个数据时它肯定会崩溃,它变成一个数组并且这个函数不适应它
  • 我怎样才能让它不崩溃?如果我有 (yourItems.contains("Gin")) [显示所有杜松子酒的饮品] + (yourItems.contains("Vodka")) [显示所有伏特加饮品] 然后将包含两者的饮品移到顶部列表。
  • 在另一个线程中提出另一个问题,我们无法通过 cmets 解决它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
相关资源
最近更新 更多