Android - 返回多次出现的 ArrayList 中项目的位置

标签 android arraylist

我有三个 ArrayList,两个是字符串,最后一个是整数。

第一个 ArrayList 包含特定 Product 的特定 Variant (variantArray),例如可乐的口味变体,第二个 ArrayList 包含 Unit (unitArray),其中包含像大小 (80oz, 500mL, 1L) 的单位产品,最后一位是数量*(quantityArray)。

这是我使用的类。

public class CurrentOrderClass {

  //ArrayLists
  private ArrayList<String> variantArray = new ArrayList<String>();
  private ArrayList<String> unitArray = new ArrayList<String>();
  private ArrayList<Integer> quantityArray = new ArrayList<Integer>();


  //TODO ArrayList functions
  public ArrayList<String> getUnitArray() {
      return unitArray;
  }

  public void setUnitArray(ArrayList<String> unitArray) {
      this.unitArray = unitArray;
  }

  public void addToUnitArray(String unit){
      this.unitArray.add(unit);
  }



  public ArrayList<Integer> getQuantityArray() {
      return quantityArray;
  }

  public void setQuantityArray(ArrayList<Integer> quantityArray) {
      this.quantityArray = quantityArray;
  }

  public void addToQuantityArray(int quantity){
      this.quantityArray.add(quantity);
  }

  public ArrayList<String> getVariantArray() {
      return variantArray;
  }

  public void setVariantArray(ArrayList<String> variantArray) {
      this.variantArray = variantArray;
  }

  public void addToVariantArray(String variantArray){
      this.variantArray.add(variantArray);
  }


  @Override
      public String toString() {
         return "[ product=" + productName + ", variants=" + 
            variants + " , unit=" + unit + " , quantity=" + quantity + "]";
      }

}

我接收用户输入,以便用户选择 Variant、Unit 和 Quantity,然后将输入存储在它们各自的 ArrayList 中。

但是,当用户输入 ArrayLists 中已存在但数量不同的 Variant 和 Unit 时,我在更新 ArrayLists 时遇到问题。我想要做的不是添加新条目,而是更新当前的 ArrayLists,这样当用户输入变体和单位但数量不同时,我只会更新数量。

我尝试的第一件事是使用 indexOf(userInputVariant) 查看输入是否已存在于 ArrayList 中,然后检查它是否与 indexOf(userInputUnit) 匹配>,这意味着用户输入已经重复。但是,我不认为 indexOf 运行在该逻辑上,它返回的值是它找到 userInputVariant 字符串的第一个实例的值。

我尝试的第二次尝试是使用 for each 循环,但是,我又一次很难正确返回我想要的索引。

我实例化了一个名为 currentOrderCurrentOrderClass 对象,并用“Grape”预填充了其 variantArray 的前 10 个元素

在那之后,我尝试了这个 if-else 语句:

if( (currentOrder.getVariantArray().indexOf(product.getVariant()[variantPosition]) ==
     currentOrder.getUnitArray().indexOf(product.getUnit()[position]) 

但是,如上所述,indexOf 在它第一次找到我告诉它要查找的字符串的位置返回一个 int,我认为它不会检查它是否存在于该特定位置之后。

我尝试的第二个代码是使用 for-each 并从那里返回位置,但同样,它只返回位置 = 0。

for( String Grape : currentOrder.getVariantArray() ){
      Log.d("Angelo", "Retrived Element: " + Grape 
           + " at position = " + currentOrder.getVariantArray().indexOf(Grape));
}

我目前正在考虑在 for-each 循环中运行 for-each 循环,但我不知道如何让它返回我想要的正确位置。

有没有人知道如何让它正常工作?我需要通过与我的 unitArray 进行“交叉引用”来返回在我的 variantArray 中多次出现的项目的位置。谢谢。

最佳答案

在这种情况下,一个 for 循环就足够了。

这会是这样的:

isExist = false;
for(index = 0; index<variantArray.size(); index++){
    if(variantArray.get(index) == userChoiceVariant &&
        unitArray.get(index) == userChoiceUnit){
        //update quantity
        isExist = true;
    }
}
if(!isExist){
    //insert order
}

关于Android - 返回多次出现的 ArrayList 中项目的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984511/

相关文章:

java - 如何修改此代码以处理包含字符和整数的输入文本?

java - 在 List 的每个索引上创建 ArrayList

java - Spring Restful Service + Spring for android,上传文件时缺少参数

android - 填充 RecyclerView 时出现 ArrayIndexOutOfBoundsException

java - 将类类型作为参数传递以在 ArrayList 中使用?

java - 如何以可序列化并通过 RMI 使用的方式包装多个字节数组

java - java中一维和二维数组之间的比较

c# - 使用 MvvmCross 将图标添加到 TabLayout

android - 如何阻止 OkHttp 在 Android 中记录多部分/表单数据上传

android - 创建最终包时,我应该评论我的日志调用吗?